上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页
摘要: 转自 http://blog.csdn.net/marcky/article/details/6014733前面单独分析了master进程和worker的工作情况,本文就大概看一下master进程和worker进程之间是如何使用channel来完成通信的。这部分实现的源码主要分布于src/os/unix/channel.h和channel.c两个文件中。实现极其简单,没有什么复杂的逻辑。下面,我绘制了一个简单的master进程和worker进程间的关系,图中的箭头符号指出数据是由master进程传给worker进程,而没有从worker到master;这是因为channel不是一个普通的数据传 阅读全文
posted @ 2013-03-06 13:55 only_eVonne 阅读(2420) 评论(0) 推荐(0) 编辑
摘要: 转自 http://blog.csdn.net/marcky/article/details/6013502本文着手分析一下worker进程的情况。首先找到worker进程的入口地方——ngx_worker_process_cycle。这个函数不光是worker进程的入口函数,同时也是worker进程循环工作的主体函数,看函数名含有一个cycle嘛。进入这个cycle函数,第一件事就是调用ngx_worker_process_init(cycle, 1);对worker进程进行初始化操作。先看看这个worker进程的初始化过程。[cpp] view plaincopyprint?ngx_pro 阅读全文
posted @ 2013-03-06 10:42 only_eVonne 阅读(935) 评论(0) 推荐(0) 编辑
摘要: Nginx分为Single和Master两种进程模型,Single模型即为单进程方式工作,具有较差的容错能力,不适合生产之用。Master模型即为一个master进程+N个worker进程的工作方式。生产环境都是用master-worker模型来工作。本文着重分析Nginx的master进程做了哪些事情,它是如何管理好各个worker进程的。在具体分析代码之前,先附上一张master进程的全貌图:我们知道在main函数中完成了Nginx启动初始化过程,启动初始化过程中的一个重要环节就是解析配置文件,回调各个配置指令的回调函数,因此完成了各个模块的配置及相互关联。在所有的这些重要及不重要的初始化 阅读全文
posted @ 2013-03-05 18:02 only_eVonne 阅读(1016) 评论(0) 推荐(0) 编辑
摘要: 转自http://blog.csdn.net/marcky/article/details/5993471在Nginx启动初始化过程(一)中提到main函数会调用ngx_init_cycle()初始化一个全局cycle变量,本文就来看看这个ngx_init_cycle()函数究竟做了哪些初始化工作。ngx_cycle_t结构类型被定义在src/core/ngx_cycle.h文件中,多达23个成员变量(nginx-0.7.67),初次目睹这个结构类型的时候,最让我震惊的是成员变量void ****conf_ctx,想必大家都知道我为何而震惊了吧,也许仅仅只是我见识太少吧,呵呵。由于ngx_in 阅读全文
posted @ 2013-03-04 14:53 only_eVonne 阅读(1299) 评论(0) 推荐(0) 编辑
摘要: [ KILL ]功能描述:用于向任何进程组或进程发送信号。1#include<sys/types.h>23#include<signal.h>45intkill(pid_tpid,intsig);67参数:pid:可能选择有以下四种1. pid大于零时,pid是信号欲送往的进程的标识。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。4. pid小于-1时,信号将送往以-pid为组标识的进程。sig:准备发送的信号代码,假如其值为零则没有任何 阅读全文
posted @ 2013-03-02 18:27 only_eVonne 阅读(348) 评论(0) 推荐(0) 编辑
摘要: Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。下面具体看一下main函数为Nginx的启动过程做了哪些初始化方面的事情。main函数做的第一件事情就是对参数选项进行处理,和普通的Linux程序如出一辙,如下:if(ngx_get_options(argc,argv)!=NGX_OK){return1;}if (ngx_get_options(argc, argv) != 阅读全文
posted @ 2013-02-28 17:19 only_eVonne 阅读(2623) 评论(0) 推荐(1) 编辑
摘要: size _t为了增强程序的可移植性,便有了size_t,不同系统上,定义size_t可能不一样。经测试发现,在32位系统中size_t是4字节的,在64位系统中,size_t是8字节的,这样利用该类型可以增加程序移植性。size_t的定义它的定义在/usr/include/linux/types.h typedef_kernel_size_tsize_t;跟体系结构相关而__kernel_size_t定义在/usr/include/asm/posix_types.h安装的是内核的源码asm-i386/posix_types.htypedef unsigned int __kernel_siz 阅读全文
posted @ 2013-02-27 14:07 only_eVonne 阅读(32340) 评论(0) 推荐(1) 编辑
摘要: 1.如果一个mac上对应有多个ip地址,那么数据按照协议栈向下封装时,怎么确定封装ip头的时候使用哪个ip地址呢?这个是靠数据目的ip决定的,首先系统会根据设备的其他网段的ip和掩码确定目的ip是否是内网的,如果是则用相应的内网ip封装ip头,如果不是,就说明这个数据包时发送到外网的,这个时候就封装外网ip。并将该数据包发送给网关进行转发。如果把一个网段掩码改了,让这个内网变小,那么本来是用内网ip封的数据包,就会改用外网ip封装。2.路由器怎么区分外网传进来的数据是给内网哪台设备的?通信过程要考虑传输层,传输层有端口号。比如用的TCP协议。外网C获得主机AB的IP地址都是路由器的地址说明做了 阅读全文
posted @ 2013-02-23 09:28 only_eVonne 阅读(3763) 评论(1) 推荐(0) 编辑
摘要: 1. 进程组每个进程除了有一个进程ID之外,还有一个进程组。进程组是一个或多个进程的集合。它们与同一作业相关联,可以接受来自同一终端的各种信号。每个进程组都有唯一的进程组ID。函数getpgrp可以得到进程的进程组ID。pid_t getpgrp(void);每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,与其组成进程是否终止无关。进程组的最后一个进程可以终止,或者转移到另一个进程组。进程可以调用setpgid来加入一个现有的组或者一个新进程组。int set 阅读全文
posted @ 2013-02-22 13:36 only_eVonne 阅读(1412) 评论(0) 推荐(0) 编辑
摘要: 这又是一个有趣的概念,daemon在英语中是"精灵"的意思,就像我们经常在迪斯尼动画里见到的那些,有些会飞,有些不会,经常围着动画片的主人公转来转去,啰里啰唆地提一些忠告,时不时倒霉地撞在柱子上,有时候还会想出一些小小的花招,把主人公从敌人手中救出来,正因如此,daemon有时也被译作"守护神"。所以,daemon进程在国内也有两种译法,有些人译作"精灵进程",有些人译作"守护进程",这两种称呼的出现频率都很高。与真正的daemon相似,daemon进程也习惯于把自己隐藏在人们的视线之外,默默为系统做出贡献,有时人 阅读全文
posted @ 2013-02-22 13:22 only_eVonne 阅读(4528) 评论(0) 推荐(2) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页