你写的关于epoll惊群的问题有些不妥
1. Linux 4.9之后已经部分修复了epoll的惊群问题,在epoll_ctl时候同时设置EXCLUSIVE标志,内核就会在事件发生的时候只唤醒一个进程或线程,如果设置ET模式,这时候是不会存在惊群问题的。
2.之所以说Linux4.9部分解决这个问题,是因为LT模式导致的,因为在LT模式下,如果有时间发生,内核会唤醒进程去处理,然而如果这个处理进程并没有立即处理这个事件,那么内核会唤起其他进程处理这个事件,这时候就导致了惊群。原因是因为LT模式下内核不会立即将事件从rdlist中取出,而是在其处理完之后再移除rdlist。
你的代码如果要发生惊群的话应该把sleep(2)打开,然后用默认的LT模式。
关于linux中select和epoll是否存在惊群效应的争执亲测,先给出结论:select不存在惊群效应,每次来一个socket消息,只有一个消费进程被唤醒。e_poll存在惊群效应,每次来一个socket连接请求,处于空闲状态的消费...