什么是惊群效应
1. 什么是惊群效应?
首先,我们来理解“惊群效应”是什么。
惊群效应 原指在自然界中,一个猎物被惊动,会引发整个兽群的一哄而上,但最终只有一个(或少数几个)能成功捕获猎物,其他大部分都白忙活一场,浪费了大量精力。
在计算机科学中,尤其是在高并发编程和网络编程中,惊群效应 指的是:
- 场景:当多个进程/线程在等待同一个资源或事件(比如,一个新的网络连接)。
- 触发:当这个资源可用或事件发生时,所有等待的进程/线程都被唤醒。
- 结果:但最终只有一个进程/线程能成功抢到该资源,并进行处理。其他所有被唤醒的进程/线程发现资源已被抢走,只能白白浪费一次CPU上下文切换,然后又重新进入等待状态。
惊群带来的问题:
- CPU资源浪费:大量不必要的上下文切换。
- 性能下降:系统吞吐量降低,延迟增加。
- 锁竞争加剧:所有被唤醒的进程/线程会同时去竞争同一个锁,导致性能瓶颈。
一个典型的例子是 旧版本 Linux 中 accept() 系统调用的惊群:多个工作进程在同一个 listen socket 上调用 accept() 阻塞等待,当一个新连接到来时,内核会唤醒所有进程,但只有一个能成功 accept 到这个连接。
2. 什么是发布-订阅模式?
发布-订阅模式是一种消息传递范式,其中:
- 发布者:不直接将消息发送给特定的接收者,而是将消息
