原文链接: http://blog.csdn.net/ordeder/article/details/21721141
1.进程A在n端口上监听,即调用listen(listenfd,backlog);
2.之后A调用fork产生子进程B,此时B拷贝了A的listenfd,该描述符使用的是相同的“文件表项”(具体参考 http://blog.csdn.net/ordeder/article/details/21716639)
3.那么A进程和B进程将共享一个socket,具体图解如下:
在该模型下(多个子进程同时共享监听套接字)即可实现服务器并发处理客户端的连接。这里要注意的是,计算机三次握手创建连接是不需要服务进程参数的,而服务进程仅仅要做的事调用accept将已建立的连接构建对应的连接套接字connfd(可参考 http://blog.csdn.net/ordeder/article/details/21551567)。多个服务进程同时阻塞在accept等待监听套接字已建立连接的信息,那么当内核在该监听套接字上建立一个连接,那么将同时唤起这些处于accept阻塞的服务进程,从而导致“惊群现象”的产生,唤起多余的进程间影响服务器的性能(仅有一个服务进程accept成功,其他进程被唤起后没抢到“连接”而再次进入休眠)。
服务器端预先创建子进程(work)同时监听服务端口和惊群现象,布布扣,bubuko.com
服务器端预先创建子进程(work)同时监听服务端口和惊群现象
原文:http://blog.csdn.net/ordeder/article/details/21721141