apache 的AcceptMutex 的理解
1. 如果apache的多个进程只监听一个端口,则不需要AcceptMutex,每个apache进程都在执行accept操作,发现请求后就开始执行,执行完继续accept,多个进程之间不会相互干扰,这是由accept的机制来完成的。
2. 如果apache的多个进程只监听socket多于一个,则不能直接accept了,就必须使用select或poll机制来发现知否有请求需要执行,发现之后,再由accept来接受请求;然而select或poll没有accept那么能自动处理互斥的问题,这时候就需要一个“锁”了,就是所谓的AcceptMutex,AcceptMutex的实现形式有多种,这个不属于本文讨论的范围。
下面是apache在监听三个socket([16 17 18])时,其中一个进程的表现:
semop(524288, 0x81dd334, 1) = 0
select(19, [16 17 18], NULL, NULL, NULL) = 1 (in [17])
accept(17, {sa_family=AF_INET, sin_port=htons(52932), sin_addr=inet_addr("10.55.38.9")}, [16]) = 29
semop(524288, 0x81dd33a, 1) = 0
第一步:先获取锁(0x81dd334), 同一时刻只有一个进程能获取锁
第二步:开始select(对于apache2这里好像是poll,poll的效率更高一些),并且发现17需要处理了
第三步:accept 17
第四步:释放锁,这样其它进程就可以获取锁并处理后续的请求了
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:phpor 来源: PHPor 的Blog
- 标签: AcceptMutex
- 发布时间:2010-04-12 09:19:50
- [44] 界面设计速成
- [39] 视觉调整-设计师 vs. 逻辑
- [39] Oracle MTS模式下 进程地址与会话信
- [35] 程序员技术练级攻略
- [35] IOS安全–浅谈关于IOS加固的几种方法
- [35] 如何拿下简短的域名
- [33] 图书馆的世界纪录
- [33] android 开发入门
- [32] 【社会化设计】自我(self)部分――欢迎区
- [30] 读书笔记-壹百度:百度十年千倍的29条法则