nginx中永远只有一个worker进程来处理epoll中的listen fd,为什么?

为了避免惊群问题直接只让一个worker进程来监听,通过accept_mutex来控制(现在的版本好像默认关闭了有新的处理方式了,姑且当我说的是开启accept_mutex的旧版本吧),但是这样和直接主进程来处理有什么区别吗?怎么就利用多核优势了呢?我能想到的就是一个worker崩了不会都崩了而已,只是增强一点鲁棒性,但是从头到尾都只有一个worker在处理所有的监听呀(上次拿到锁的会交出所有的fd),在我看来,就是增强了健壮性而已,网上很多人说提高了并发,利用了多核优势,我该如何理解呢?

阅读 3.7k
2 个回答

其实是个人的理解问题,只是用一个worker来监听 监听套接字 而已,用多线程的worker来监听 连接套接字,自然就利用了多核优势

了解一个概念就是多核下可以线程并行执行,打比方你的cpu是4核,同时间在每个核上可以执行一个线程,是不是4个线程并行操作?
worker数量设置成cpu核数,就是为了充分利用这个核数的优势,因为一个worker进程只会跑一个worker线程。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题