加载中
C模块化编程

模块化编程 是指程序核心部分定义好功能的接口,而具体的实现留给各个模块去做。举个现实世界的例子:我们可以在电脑的PCI插槽上安装显卡、声卡或者网卡,原因就是这些硬件都按照PCI接口的规...

HTTP协议详解

本书是介绍怎么编写一个Web服务器,而Web服务器是基于HTTP(HyperText Transfer Protocol)协议实现的,所以要实现一个Web服务器就必须了解HTTP协议,本章主要介绍HTTP协议的相关知识,让我们...

epoll原理简介

epoll是Linux引以为荣的技术,因为相对于select和poll有很大的性能改进。本文主要介绍epoll的实现原理,了解epoll高效背后的魔法。 epoll的使用简介 1. epoll_create 使用epoll时需要使用epo...

Nginx线程池浅析

Nginx通过使用多路复用IO(如Linux的epoll、FreeBSD的kqueue等)技术很好的解决了c10k问题,但前提是Nginx的请求不能有阻塞操作,否则将会导致整个Nginx进程停止服务。 但很多时候阻塞操作是...

谈谈协程

什么是协程? 协程被称为“轻量级线程”或者“用户态线程”。最近协程在高并发编程领域大放异彩,如Golang天生就支持协程,Lua和Python也支持协程。但其实协程并不是最近才出现的新技术,恰恰...

2016/11/26 13:01
0
唯一ID生成原理与PHP实现

snowflake算法 虽然PHP提供了一个生成唯一ID的函数uniqid(),但这个函数真的可以生成唯一ID吗?我们来看看uniqid()的具体实现: PHP_FUNCTION(uniqid) { ... gettimeofday((struct timeval ...

Redis Sentinel原理与实现 (下)

故障转移 监控到有Redis主服务器宕机, Sentinel就开始进行故障转移。故障转移的目的是把有问题的主服务器摘掉,然后选择一台从服务器提升为主服务器。因为在主从架构中,主服务器负责处理所...

Redis Sentinel原理与实现 (中)

Sentinel源码分析 在启动Redis时可以传入“--sentinel”参数来启动Sentinel,在main()函数中可以看到处理Sentinel的逻辑,如下: int main(int argc, char **argv) { ... server.sentinel_mo...

Redis Sentinel原理与实现 (上)

Sentinel(哨兵)是Redis 2.8版本发布的一个功能,使用Sentinel可以实现高可用的Redis集群服务。Sentinel的作用是实时监控Redis集群中的所有服务器,当Redis主服务器宕机后,会自动把从服务器...

2017/06/27 16:36
0
区块链扫盲篇之使用PHP实现区块链(一) - 基础结构

引言 什么是区块链?官方的解释是:区块链是一个分布式记账系统,是藉用密码学串接并保护其内容的串连交易记录(又称区块)。每一个区块包含了前一个区块的加密散列、对应的时间戳记以及交易...

区块链扫盲篇之使用PHP实现区块链(二) - 工作量证明

1 前言 上一篇文章我们介绍了区块链的最基本数据结构-区块,而且还构建了一个最原始的区块链。但是现在我们很容易就可以向区块链中添加区块,这样有可能导致大量的区块在同时添加到区块链中...

区块链扫盲篇之使用PHP实现区块链(三) - 区块链持久化

1引言 前一篇文章我们已经介绍了怎么为区块链加上工作量证明,但离可用的区块链还差很远。我们现在的区块链保存在内存中,进程退出或者机器重启都会导致区块链数据丢失。所以这一篇文章主要介...

Linux内存管理 - slab分配器

Linux内存管理是一个非常复杂的子系统,要完全说清的话估计要一本书的篇幅。但Linux内存管理可以划分成多个部分来阐述,这篇文章主要介绍slab算法。 Linux有个叫伙伴系统的分配算法,这个算法...

Golang实现守护进程

因为Golang没有Linux的fork()系统调用, 所以实现守护进程要使用一些小技巧. Golang为*nix(unix/linux/FreeBSD...)系统提供了syscall.ForkExec()调用, 这个调用跟fork()调用不一样, syscall.F...

2019/01/02 20:49
63
Linux进程详解

进程 程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开...

2019/01/18 15:36
25
Linux信号处理

什么是信号 信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源: 程序错误:除零,非法内存访问等。 外部信号:终端 Ctrl-C 产生 SGINT 信号,定时器到期产生SIGALRM等。...

多路复用IO内幕

什么是多路复用IO 多路复用IO (IO multiplexing) 是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。在Linux系统中,常用的 多路复用IO 手段有 select、poll 和 epol...

socket接口层分析

Socket接口的分层 Socket的英文原本意思是 孔 或 插座。但在计算机科学中通常被称作为 套接字,主要用于相同机器的不同进程间或者不同机器间的通信。Socket的使用很多网络编程的书籍都有介绍...

Linux内存页分配策略

伙伴系统分配算法 在上一节, 我们介绍了Linux内核怎么管理系统中的物理内存. 但有时候内核需要分配一些物理内存地址也连续的内存页, 所以Linux使用了 伙伴系统分配算法 来管理系统中的物理内...

容器原理之 - namespace

namespace介绍 namespace(命名空间) 是Linux提供的一种内核级别环境隔离的方法,很多编程语言也有 namespace 这样的功能,例如C++,Java等,编程语言的 namespace 是为了解决项目中能够在不...

2019/05/27 16:58
28

没有更多内容

加载失败,请刷新页面

返回顶部
顶部