Nginx的workder进程数为什么要设置成和CPU核数一致

答:1)Ngnix一般只做高并发代理,基本没用IO操作,算是CPU密集操作,所以再处理时基本是瞬时完成的,很少出现IO阻塞。

  2)进程与CPU调度的关系,单个核心处理多个进程的时候,是排队处理的,所以将Worker进程数量设置超过核心数是没有太大意义的。

 

核心思想:

每个worker进程都是单线程的进程,多workder进程可以充分利用多核系统架构,但若workder进程的数量多于CPU内核数,那么会增大进程间切换带来的消耗(linux是抢占式内核),一般情况下,用户要配置与CPU内核数相等的workder进程,并且使用下面的workder_cpu_affinity配置来绑定CPU内核,为什么要绑定workder进程到指定的CPU内核呢?假定每一个workder进程都是非常繁忙的,如果多个workder进程都在抢同一个CPU,那么这就会出现同步问题,反之,如果每一个worder进程都独享一个CPU,就在内核的调度策略上实现了完全的并发,例如,如果有四颗CPU内核,就可以进行如下配置:

worker_processes 4;

worker_cpu_affinity 1000 0100 0010 0001;

备注:worker_cpu_affinity配置仅对linux操作系统有效,linux操作系统使用sched_setaffinit()系统调用实现这个功能。

posted @ 2020-01-09 17:25  Mr_Echo  阅读(1154)  评论(0编辑  收藏  举报