您的位置:首页 > 运维架构 > Nginx

NGINX的进程处理乱谈

2014-01-27 23:07 197 查看
服务器处理程序一般会采用fork模式, 每来一个新的连接时,会创建一个新的进程,新的进程中会重新创建一个socket,后续新连接的消息就由fork出来的这个进程处理.

NGINX架构修改了这种模式, 新连接过来时,还是由work进程来处理.

对于fork模式, 新建的进程如果采用阻塞模式,应该是性能更高,因为在没有报文时,该进程不会被调度.

而同一个进程处理多个连接,就必须抛弃阻塞模式,因为阻塞模式会阻塞进程处理其他的连接,同时如果select的话, 可能也不是最佳选择,首先select支持fd的数目有限,如果需要支持更多的fd,还需要修改linux系统头文件,还有select当支持fd过多时,性能很低, 所以效率较高的处理方式就是epoll.

linux创建进程的开销很大,并且也占用相当多的资源, 当linux进程变多时, linux进程调度开销也很大.

nginx采用一个进程处理多个连接就减少了上述开销,较少了连接的处理时间和资源消耗.

nginx考虑非常细致, 在多核上,为了减少因为work进程切换到不同核上带来的cache miss开销, nginx为work增加了核绑定处理.

nginx的事件驱动对性能提升也很大.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: