nginx中永远只有一个worker进程来处理epoll中的listen fd,为什么?
为了避免惊群问题直接只让一个worker进程来监听,通过accept_mutex来控制(现在的版本好像默认关闭了有新的处理方式了,姑且当我说的是开启accept_mutex的旧版本吧),但是这样和直接主进程来处理有什么区别吗?怎么就利用多核优势了呢?我能想到的就是一个worker崩了不会都崩了而已,只是增强一点鲁棒性,但是从头到尾都只有一个worker在处理所有的监听呀(上次拿到锁的会交出所有的fd),在我看来,就是增强了健壮性而已,网上很多人说提高了并发,利用了多核优势,我该如何理解呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其实是个人的理解问题,只是用一个worker来监听 监听套接字 而已,用多线程的worker来监听 连接套接字,自然就利用了多核优势
了解一个概念就是多核下可以线程并行执行,打比方你的cpu是4核,同时间在每个核上可以执行一个线程,是不是4个线程并行操作?
worker数量设置成cpu核数,就是为了充分利用这个核数的优势,因为一个worker进程只会跑一个worker线程。