免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21967 | 回复: 53

惊群(thundering herd)问题在linux上可能是莫须有的问题 [复制链接]

论坛徽章:
0
发表于 2007-06-07 16:02 |显示全部楼层
"惊群"问题在linux上存在吗?

有文章,还有权威书支持,还有解决方法。

在UNIX网络编程第1卷里有提到。当某一时刻只有一个连接过来时,N个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能 .


大家可以编一个程序实验看存在与否?程序就是fork, 让多个进程(或THREAD)都阻塞在accept 同一个sock描述符。当有连接进来,你看是唤醒几个进程?一个还是多个?

[ 本帖最后由 思一克 于 2007-6-8 10:11 编辑 ]

论坛徽章:
0
发表于 2007-06-07 16:11 |显示全部楼层
恩,今天提到这个问题的时候我去找lighttpd1.4.15的代码来看,发现里面的做法也是fork进程进行accept的.

论坛徽章:
0
发表于 2007-06-07 16:11 |显示全部楼层
>>当有连接进来,你看是唤醒几个进程?一个还是多个?

"唤醒进程"如何知道呢?

论坛徽章:
0
发表于 2007-06-07 16:15 |显示全部楼层
我跟踪了tcp_accept,

阻塞在wait_for_connect, 而这个函数根本就是用prepare_to_wait_for_exclusive,

函数的说明也是仅仅唤醒一个。 “only one process gets woken up".

跟踪的结果也是一个。

论坛徽章:
0
发表于 2007-06-07 16:21 |显示全部楼层
原帖由 思一克 于 2007-6-7 16:15 发表
我跟踪了tcp_accept,

阻塞在wait_for_connect, 而这个函数根本就是用prepare_to_wait_for_exclusive,

函数的说明也是仅仅唤醒一个。 “only one process gets woken up".

跟踪的结果也是一个。


思一克兄好強啊!這麼深入。

论坛徽章:
0
发表于 2007-06-07 16:24 |显示全部楼层
你看net/ipv4/tcp.c
中的
wait_for_connect函数,里面有说明,仅仅唤醒一个进程

accept()调用sys_accept, 然后是tcp_accept.

论坛徽章:
0
发表于 2007-06-07 16:25 |显示全部楼层
原帖由 思一克 于 2007-6-7 16:15 发表
我跟踪了tcp_accept,

阻塞在wait_for_connect, 而这个函数根本就是用prepare_to_wait_for_exclusive,

函数的说明也是仅仅唤醒一个。 “only one process gets woken up".

跟踪的结果也是一个。


有什么办法可以在应用层面不看协议栈内核源码的情况下证明这个结果的?

论坛徽章:
0
发表于 2007-06-07 16:26 |显示全部楼层
在accept()后面加printf()看有没有返回就可以。

如果唤醒多个,必然有返回。

原帖由 converse 于 2007-6-7 16:25 发表


有什么办法可以在应用层面不看协议栈内核源码的情况下证明这个结果的?

论坛徽章:
0
发表于 2007-06-07 16:29 |显示全部楼层
个人觉得惊群的问题应该是存在的,只是内核把这个问题给解决了,不在应用层表现出来。
记得在richard stevens的书里有例子,进程或者线程越多,效率就越低,我觉得这个就是证据。
谁看过这方面内核代码,知道具体情况的告知一下真实情况,我也学习一下,谢谢。

[ 本帖最后由 Sorehead 于 2007-6-7 16:36 编辑 ]

论坛徽章:
0
发表于 2007-06-07 16:35 |显示全部楼层
原帖由 思一克 于 2007-6-7 16:26 发表
在accept()后面加printf()看有没有返回就可以。

如果唤醒多个,必然有返回。



我觉得这个不足以作为证据的.
网络编程第一卷里面说的是那些accept失败的进程会继续阻塞住,也就是说,这些进程应该不会执行后面的这句printf.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP