源码分析

linux下daemon守护进程的实现(以nginx代码为例)

  setsid相关知识: 通过调用setsid函数,使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程。为了使读者更好地理解这一步骤,下面介绍进程组、会话(session)的基本概念。 在Linux系统中,所有的进程都属于各自的进程组。进程组是一个或多个进程的集合。打个比方,可以认为某个班级是一个进程组,而其中成员就是进程。一个班级至少有一个成员。当一个班级的最后一个成员不存在的时候,这个班级也就不存在了,也就是进程组消亡了。 每个进程组都有类似于进程号的标识,称为进程组ID。进程组ID是由领头…
阅读全文…

nginx中request buf的设计和实现

在nginx中request的buffer size我们能够通过两个命令进行设置,分别是large_client_header_buffers和client_header_buffer_size。这两个是有所不同的。 在解析request中,如果已经读取的request line 或者 request header大于lient_header_buffer_size的话,此时就会重新分配一块大的内存,然后将前面未完成解析的部分拷贝到当前的大的 buf中,然后再进入解析处理,这部分的buf也就是large_client_header_buffers,也叫做large hader的处理。接下来我会…
阅读全文…

解密Redis持久化

本文内容来源于Redis作者博文,Redis作者说,他看到的所有针对Redis的讨论中,对Redis持久化的误解是最大的,于是他写了一篇长文来对Redis的持久化进行了系统性的论述。文章非常长,也很值得一看,NoSQLFan将主要内容简述成本文。 什么是持久化,简单来讲就是将数据放到断电后数据不会丢失的设备中。也就是我们通常理解的硬盘上。 写操作的流程 首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程。 客户端向服务端发送写操作(数据在客户端的内存中) 数据库服务端接收到写请求的数据(数据在服务端的内存中) 服务端调用write(2) 这个系统调用,将数据往磁盘上写(数据…
阅读全文…