一步一步深入理解Nginx(四)Nginx进程间的关系

2016/01/0420:46:09 发表评论

 

今天有一件高兴的事要跟大家分享,果子博客重新整顿风格后,人气一直飙升,今天早上起来一看,已经10K+访问量了,这都离不开大家的支持,由于时间关系,今天我只跟大家分享下Nginx工作进程处理关系图,后续将更新Nginx配置解析模块。

运行中的Nginx进程间的关系

首先我们来看一副图再作讲解:

QQ截图20160104204540

在上一节中,我们提到了Nginx的master进程,即Nginx的“管理员”进程,它的进程ID有且仅有一个,它仅专注于自己的纯管理工作,即管理它的worker进程,当做生意一个对外提供服务的worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务;此外,它还可以为管理员提供命令行服务,包括前面小节中提到的向Nginx发送信号、启动服务、停止服务、重载配置文件、平滑升级等。通常情况下它是以root用户启动或编译选项中指定的用户来启动。


多个worker进程处理互联网请求不但可以提高服务的健壮性——一个worker进程出错后,其它worker进程仍然可以提供服务,事实上,它最重要的功能在于,可以充分利用现在觉的SMP多核架构,从而实现微观上真正的多核并发处理,所以,在Nginx的配置文件中有一个配置项work_processes number,其中number为指定的进程数,一般为CPU的核数,worker_cpu_affinity 配置项为绑定CPU的核数,以下为一个简单的配置组合:

work_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;


这里,我们可以拿另一个WEB服务器Apache来作比较,Apache上每个进程在同一时刻只能处理一个请求,因此,如果希望WEB服务器拥有更多的并发请求,就要把Apache的进程或线程数设置的更多,通过一台服务器拥有几百个工作进程,这样在并发请求时,大量的进程间切换将带来巨大的系统资源消耗。

 

而Nginx则不同,一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,也不会进入睡眠状态,当Nginx上的进程数与CPU核心数相等时,进程间的切换代价是最小的。

 

 

  • 微信扫码赞助
  • weinxin
  • 支付宝赞助
  • weinxin

发表评论

您必须才能发表评论!