博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2、惊群现象
阅读量:5173 次
发布时间:2019-06-13

本文共 1093 字,大约阅读时间需要 3 分钟。

参考文献有

1:https://blog.csdn.net/russell_tao/article/details/7204260 

2:https://www.jianshu.com/p/8f362e943e56

什么是“惊群”?

多线程/多进程(linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群。可以想见,效率很低下,许多进程被内核重新调度唤醒,同时去响应这一个事件,当然只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠(也有其他选择)。这种性能浪费现象就是惊群。

-------------------------------------

举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。

------------------------------------

造成的后果:

1)系统对用户进程/线程频繁的做无效的调度、上下文切换,系统系能大打折扣。
2)为了确保只有一个线程得到资源,用户必须对资源操作进行加锁保护,进一步加大了系统开销。
------------------------------------
对于惊群效应的场景描述,最常见的就是对于socket操作符的accept操作的描述。当多个用户进程/线程同时监听同一个端口时,由于实际上一个请求过来,只有一个进程/线程accept成功,所以就会产生惊群效应。
-----------------------------------------
linux解决方式:
线程池通知改变方式,有空闲线程则通知某一个;没空闲则广播(谁先完给谁,如果同时完成,那么又惊群了)。
----------------------------------------
nginx是怎么处理惊群

同一时刻只允许一个nginx worker在自己的epoll中处理监听句柄。它的负载均衡也很简单,当达到最大connection的7/8时,本worker不会去试图拿accept锁,也不会去处理新连接,这样其他nginx worker进程就更有机会去处理监听句柄,建立新连接了。而且,由于timeout的设定,使得没有拿到锁的worker进程,去拿锁的频繁更高。(没懂)

转载于:https://www.cnblogs.com/westlife-11358/p/10469486.html

你可能感兴趣的文章
MCS-51子程序库-1
查看>>
Hadoop入门
查看>>
h5页面在ios机上禁止长按复制
查看>>
Linux中的ls命令详细使用
查看>>
修改本地数据库root权限密码
查看>>
java中计算两日期相减方法
查看>>
PHP学习笔记十二【数组排序】
查看>>
Python 面向对象编程(一)
查看>>
java file.listFiles()按文件名称、日期、大小排序
查看>>
Https 网站
查看>>
找下一个更大元素
查看>>
Linux 访问控制列表(access control list)
查看>>
Protel99se信号完整性的最新应用
查看>>
chapter10--进程和计划任务管理
查看>>
JavaScript示例
查看>>
25个jQuery的编程小抄
查看>>
JS 入门
查看>>
Forward: X Forwarding with Putty on Windows
查看>>
【CSS3】纯CSS代码实现模拟时钟,+js对时功能。
查看>>
微信jsapi开发教程全
查看>>