一直以来都纠结于现如今是否在网络编程中还会受accept惊群的影响而纠结,纠结于为什么nginx中是accept+epoll+锁机制,而lighttpd中却没有使用锁;传说中在如今的内核中早已经解决了惊群现象,但是为什么nginx仍使用了锁呢?
典型的情景是,在fork子进程之前bind + listen,子进程中accept,每个进程实际仍是在同一个socket接口上监听(虽然文件描述符不同,但其实是同一个文件表项),一个连接到来是,只会有一个进程能accept成功,那其他的进程呢?
查阅很多资料,也自己做了不少测试,最后找到一种结论,即如上情景中,即使有几十个子进程accept于同一个套接口,当一个连接到来是,也只会有5、6个进程被唤醒,同样只有一个进程能accept,其余的产出EAGAIN错误。
所以,还是有轻微的惊群现象存在,但影响似乎已经不会很大了
转载于:https://blog.51cto.com/liulixiaoyao/756068