浏览 3197 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-04
apache 的分析文章之后,觉得里面的图非常好地描述了 apache 的结构。也尝试用 visio 画一下 spprocpool 的结构。
看了 对图中各个部分的说明: 1. MasterServer 通过 Fork 创建 ProcessManager ,ProcessPool 作为 ProcessManager 在 MasterServer 中的存根 2. 在 ProcessPool 和 ProcessManager 存在一个 ManagerPipe 管道 3. 当 MasterServer 需要更多的子进程的时候,MasterServer 通过 ProcessPool 对象向 ProcessManager 发起创建 ChildServer 的请求4. ProcessManager 是创建 ChildServer 的唯一一个地方 5. 在 MasterServer 和 ChildServer 之间存在一个 ChildPipe 管道 6. MasterServer 只负责监控子进程的状态(包括:忙、闲、异常退出),监控子进程的状态完全是通过 ChildPipe 来进行的;MasterServer 使用 select 可以同时监控所有的 ChildPipe 的可读状态;当一个 ChildPipe 可读的时候,MasterServer 读入内容,如果读入的最后一个字节为 BusyChar,设置 Child 的状态为 Busy;如果为 IdleChar ,设置 Child 的状态为 Idle;如果读入 0 字节,那么表示 Child 已经关闭 ChildPipe ,也就表明 Child 已经异常退出了。 7. ChildServer 被创建出来之后,就在 ListenFd 上 accept ,如果 accept 成功就通过 ChildPipe 发送一个 BusyChar,然后开始处理;处理结束之后,再通过 ChildPipe 发送一个 IdleChar;接着检查 PipeOfDeath 是否有内容,如果读到有内容,那么子进程自行退出; 关于几个主要文件句柄的传递说明: 1. ManagerPipe :MasterServer 创建,传递给 ProcessManager(通过 Fork) 2. ListenFd :MasterServer 创建,传递给 ProcessManager(通过 Fork),由 ProcessManager 传递给 ChildServer(通过Fork) 3. PipeOfDeath :MasterServer 创建,传递给 ProcessManager(通过 Fork),由 ProcessManager 传递给 ChildServer(通过 Fork),MasterServer 持可写的一端,各个 ChildServer 持可读的一端;PipeOfDeath 在 MasterServer 只有一个句柄; 4. ChildPipe :MasterServer 创建,传递给 ProcessManager(通过 Send_Fd),由 ProcessManager 传递给 ChildServer(通过 Fork),ChildPipe 在 MasterServer 有多个,每个 ChildServer 有一个 ChildPipe; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |