一直以来都纠结于现如今是否在网络编程中还会受accept惊群的影响而纠结,纠结于为什么nginx中是accept+epoll+锁机制,而lighttpd中却没有使用锁;传说中在如今的内核中早已经解决了惊群现象,但是为什么nginx仍使用了锁呢?

典型的情景是,在fork子进程之前bind + listen,子进程中accept,每个进程实际仍是在同一个socket接口上监听(虽然文件描述符不同,但其实是同一个文件表项),一个连接到来是,只会有一个进程能accept成功,那其他的进程呢?

查阅很多资料,也自己做了不少测试,最后找到一种结论,即如上情景中,即使有几十个子进程accept于同一个套接口,当一个连接到来是,也只会有5、6个进程被唤醒,同样只有一个进程能accept,其余的产出EAGAIN错误。

贴个链接:http://www.w3ccollege.org/webserver/lighttpd/multi-process-test-lighttpd-accept-the-phenomenon-of-shock-group.html

 

所以,还是有轻微的惊群现象存在,但影响似乎已经不会很大了