技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Apache --> apache 的AcceptMutex 的理解

apache 的AcceptMutex 的理解

浏览:2802次  出处信息
当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

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

    

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1