UDN-企业互联网技术人气社区

板块导航

浏览  : 2133
回复  : 7

[框架] nginx - master进程&worker进程

[复制链接]
winy的头像 楼主
发表于 2014-7-9 08:32:36 | 显示全部楼层 |阅读模式
本帖最后由 winy 于 2015-5-12 22:54 编辑

daemon守护线程

  nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。

  当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。

  master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

  worker进程则是处理基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。

  worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。更多的worker数,只会导致进程来竞争cpu资源了,从而带来不必要的上下文切换。而且,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。
     惊群现象

  每个worker进程都是从master进程fork过来。在master进程里面,先建立好需要listen的socket之后,然后再fork出多个worker进程,这样每个worker进程都可以去accept这个socket(当然不是同一个socket,只是每个进程的这个socket会监控在同一个ip地址与端口,这个在网络协议里面是允许的)。一般来说,当一个连接进来后,所有在accept在这个socket上面的进程,都会收到通知,而只有一个进程可以accept这个连接,其它的则accept失败。




     相对于线程,采用进程的优点

  进程之间不共享资源,不需要加锁,所以省掉了锁带来的开销。

  采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快重新启动新的worker进程。

  编程上更加容易。
  多线程的问题

  而多线程在多并发情况下,线程的内存占用大,线程上下文切换造成CPU大量的开销。想想apache的常用工作方式(apache也有异步非阻塞版本,但因其与自带某些模块冲突,所以不常用),每个请求会独占一个工作线程,当并发数上到几千时,就同时有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战,线程带来的内存占用非常大,线程的上下文切换带来的cpu开销很大,自然性能就上不去了,而这些开销完全是没有意义的。




     异步非阻塞

  异步的概念和同步相对的,也就是不是事件之间不是同时发生的。

  非阻塞的概念是和阻塞对应的,阻塞是事件按顺序执行,每一事件都要等待上一事件的完成,而非阻塞是如果事件没有准备好,这个事件可以直接返回,过一段时间再进行处理询问,这期间可以做其他事情。但是,多次询问也会带来额外的开销。

  总的来说,Nginx采用异步非阻塞的好处在于:

    不需要创建线程,每个请求只占用少量的内存
    没有上下文切换,事件处理非常轻量

  淘宝tengine团队说测试结果是“24G内存机器上,处理并发请求可达200万”。




发表于 2014-7-9 08:58:19 | 显示全部楼层



一个网络连接就是一个进程,linux默认最大的网络连接数是65535,查一下如何设置才能达到200万
使用道具 举报

回复

winy的头像 楼主
发表于 2014-7-9 09:26:57 | 显示全部楼层
嗯嗯,好的~
使用道具 举报

回复

winy的头像 楼主
发表于 2014-7-10 14:16:32 | 显示全部楼层
修改linux最大进程数技能get
使用道具 举报

回复

发表于 2014-7-15 16:51:10 | 显示全部楼层
看不懂,当小说看了...
使用道具 举报

回复

发表于 2014-7-15 19:51:40 | 显示全部楼层
ReadJVM 发表于 2014-7-15 16:51
看不懂,当小说看了...

能当小说看也是本事
使用道具 举报

回复

发表于 2014-7-20 00:01:36 | 显示全部楼层



UAP 里用不到nginx吧.
使用道具 举报

回复

winy的头像 楼主
发表于 2014-7-21 08:37:29 | 显示全部楼层
老V唐 发表于 2014-7-20 00:01
UAP 里用不到nginx吧.

所以我放在web技术版块~
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部