nginx的事件处理函数ngx_process_events_and_timers,linux上最终会调用 ngx_epoll_process_events。
之后epoll_wait 后得到相应的事件,再做相应的处理,即监听与处理是在同一个线程中处理的,这样会有几个问题:
1.如果有多个事件,必须等待上一个事件处理完毕才能处理下一个。
2.同一个connection,只能按”接收-发送-接收-发送“这样的顺序进行,而不能实现真正的双工。
另外,ngx_epoll_add_event/ngx_epoll_add_connection函数已经限制一个进程能只能一个接收处理线程,而只能采取多进程的方式。
对于流媒体协议的处理,以上明显是瓶颈。