惊群效应
惊群问题
- 惊群问题是计算机科学中,当许多进程等待一个事件,事件发生后这些进程被唤醒,但只有一个进程能获得CPU执行权,其他进程又得被阻塞,这造成了严重的系统上下文切换代价。
解决办法
- 不希望把所有进程都唤醒,就采用定点唤醒某一个进程的做法
- 比如说C++在std::condition_variable满足条件,线程唤起时,其实际上并不会唤起所有等待的线程,而是随机唤起一个正在等待的线程。这样做的达到的结果跟唤起所有线程一起争抢锁资源的结果一样,但是可以很大程度上避免系统上下报文的切换
- 尽量避免进程上下文切换。
- 采用合适的任务分配策略,减少正在等待线程的数量
参考资料
https://zh.wikipedia.org/wiki/%E6%83%8A%E7%BE%A4%E9%97%AE%E9%A2%98