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
- [10] 文言文白话文互转:文言文转白话文(现代文),
- [10] 用邻接表实现无向图
- [10] 海量数据面试题举例
- [9] 一个 VLA (可变长度数组)的实现
- [9] apt 的 update 和 upgrade
- [8] 为什么数组标号是从0开始的?
- [8] arduino-蓝牙各种版本类型及费用对比
- [8] Http/2知识图谱
- [8] HTTPS, SPDY和 HTTP/2性能的
- [7] 近场通信 vs. 低功耗蓝牙:如何抉择