2013年1月26日星期六

文件描述符传递方式的开销

以前提到过用文件描述符传递方式解决多进程惊群问题。最近实际测试了一下这种实现,发现实际效果不佳。较多进程无锁方式(nginx的实现减少进程锁)差得多,仔细思考了下,理论上应该这样解释这个原因:

1. 进程间文件描述符传递方式在接收一次连接时,整个系统会有 accept, sendmsg, recvmsg, epoll_ctl四次系统调用

2. 多进程无锁方式尽管有惊群效应,但接收一次连接时,最多N进程 × 1(accept)次系统调用,而且sendmsg调用开销远较一次accept为大。

3,文件描述符传递方式还存在进程间切换,以及发送接收数据的时间开销

综上,Nginx的实现方式尽管复杂,却是最高效的方式。