IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

apache 的AcceptMutex 的理解

PHPor 的Blog 2010-04-12 09:19:50 累计浏览 3,367 次
本机暂存
当apache监听多个端口或多个ip上的端口时,多个子进程是怎么分工的呢?和只监听一个端口有什么区别吗?

    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

    第四步:释放锁,这样其它进程就可以获取锁并处理后续的请求了

同分类推荐文章

  1. Vibe新开源项目 - Vaala AI Gateway (2026-05-17 02:10:19)
  2. SmartPerfetto 架构文章 Q&A:8 个深度技术问答 (2026-04-10 11:00:00)
  3. 让 AI 把我的 PHP 博客重写成 Go (2026-03-27 18:33:54)

查看更多 后端 文章 →

建议继续学习

  1. libcurl的使用总结(二) (累计阅读 15,002)
  2. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 12,983)
  3. server日志的路径分析 (累计阅读 11,186)
  4. AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁) (累计阅读 10,024)
  5. 查看 Apache并发请求数及其TCP连接状态 (累计阅读 10,004)
  6. PHP程序的执行流程 (累计阅读 9,964)
  7. Cacti 添加 Apache 监控 (累计阅读 9,110)
  8. 大型高并发高负载网站的系统架构分析 (累计阅读 8,922)
  9. 使用Apache 和Passenger来运行puppetmaster (累计阅读 8,245)
  10. 使用apache的404设置来转向可能不存在的页面 (累计阅读 8,164)