多进程epoll调度问题
在linux内核大于 3.9 的网络编程中,为了避免惊群,可以使用 OS_REUSEPORT。
这样使得多个进程可以监听同一个端口(参见nginx 1.9.1)
在多个子进程使用epoll创建对socket监听后,当有事件产生,操作系统会选择一个进程响应。假如只有一个进程,且进程正在进行处理,这个时候若有事件发生,这个进程会不会被打断?假如所有进程都在运行,新的事件是等待某个进程执行完以后,分配给它,还是直接先绑定到某个进程上?
对操作系统了解很少,希望得到一些帮助,谢谢大家。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不会。epoll是需要进程自己调用epoll_wait去阻塞等待事件发生的,如果进程在进行处理时有新事件发生了,要等下一次调用epoll_wait时进程才能知道。
由内核调度直接分配,这个进程会收到一个
连接事件
。可以看看这个server端简单的代码https://github.com/WinterChen/reuseport_example/blob/master/udp_reuseport_server.cc