惊群效应的概念
惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个事件的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。
惊群效应的危害:系统对用户进程/线程频繁地做无效的调度,加大了系统开销。
惊群效应的解决方法
在accept之前加锁
lock;
accept();
unlock;
SO_REUSEPORT
在使用SO_REUSEPORT后,多个进程的套接字可以同时监听同一个IP:端口,然后由内核决定将新连接发送给哪个进程,显然会降低每个进程接收新链接时锁竞争: