多进程epoll调度问题

发布于 2022-09-06 05:22:47 字数 360 浏览 13 评论 0

在linux内核大于 3.9 的网络编程中,为了避免惊群,可以使用 OS_REUSEPORT。
这样使得多个进程可以监听同一个端口(参见nginx 1.9.1)

在多个子进程使用epoll创建对socket监听后,当有事件产生,操作系统会选择一个进程响应。假如只有一个进程,且进程正在进行处理,这个时候若有事件发生,这个进程会不会被打断?假如所有进程都在运行,新的事件是等待某个进程执行完以后,分配给它,还是直接先绑定到某个进程上?

对操作系统了解很少,希望得到一些帮助,谢谢大家。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白云不回头 2022-09-13 05:22:47

假如只有一个进程,且进程正在进行处理,这个时候若有事件发生,这个进程会不会被打断

不会。epoll是需要进程自己调用epoll_wait去阻塞等待事件发生的,如果进程在进行处理时有新事件发生了,要等下一次调用epoll_wait时进程才能知道。

最近可好 2022-09-13 05:22:47

假如所有进程都在运行,新的事件是等待某个进程执行完以后,分配给它,还是直接先绑定到某个进程上?

由内核调度直接分配,这个进程会收到一个连接事件
可以看看这个server端简单的代码https://github.com/WinterChen/reuseport_example/blob/master/udp_reuseport_server.cc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文