免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 思一克

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

论坛徽章:
0
发表于 2007-06-07 16:38 |显示全部楼层
在KERNEL中仅仅唤醒一个进程。

原帖由 Sorehead 于 2007-6-7 16:29 发表
个人觉得惊群的问题应该是存在的,只是内核把这个问题给解决了,不在应用层表现出来。
谁看过这方面内核代码,知道具体情况的告知一下真实情况,我也学习一下,谢谢。

论坛徽章:
0
发表于 2007-06-07 16:39 |显示全部楼层
所以我才看KERNEL中的wait_for_connect()唤醒不。就是有同样的疑问

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


我觉得这个不足以作为证据的.
网络编程第一卷里面说的是那些accept失败的进程会继续阻塞住,也就是说,这些进程应该不会执行后面的这句printf.

论坛徽章:
0
发表于 2007-06-07 17:02 |显示全部楼层
还得麻烦思版主也看看select函数是不是也会有惊群问题....前面你看的是accept函数的实现.

论坛徽章:
0
发表于 2007-06-07 17:12 |显示全部楼层
其它的再研究。accept是没有的。

我又看了KERNEL的wake_up_XXXX,它唤醒多个等待某资源(EXCLUSIVE)的进程其中的一个比唤醒全部代价还小,它为什么自己找麻烦唤醒所有的?

原帖由 converse 于 2007-6-7 17:02 发表
还得麻烦思版主也看看select函数是不是也会有惊群问题....前面你看的是accept函数的实现.

论坛徽章:
0
发表于 2007-06-07 17:22 |显示全部楼层
TO converse,

你可以写个程序,让多个进程阻塞在select 同一个sock, 加printf, 看是唤醒多个还是一个。


原帖由 converse 于 2007-6-7 17:02 发表
还得麻烦思版主也看看select函数是不是也会有惊群问题....前面你看的是accept函数的实现.

论坛徽章:
0
发表于 2007-06-08 10:03 |显示全部楼层
版主的专研精神,真是PFPF...
纠正了我很长时间来,在linux中对于多进程服务器设计上的一个细节概念.
由于在Apache2的prefork MPM的模型中,是在accpet前面加锁,所以我潜意识中认为这种设计是更优的.
但却从未考虑过accpet()的"惊群"问题.
原来,这个问题在早期的2.2的kernel中,早就讨论过.至从2.2.9的内核起,这个问题就不复存在了.

在英文中,"惊群"原来是"thundering herd"
http://www.citi.umich.edu/projec ... reports/accept.html

论坛徽章:
126
15-16赛季CBA联赛之浙江
日期:2016-12-27 11:43:0315-16赛季CBA联赛之福建
日期:2017-10-10 11:30:3015-16赛季CBA联赛之山东
日期:2017-10-12 19:25:3915-16赛季CBA联赛之四川
日期:2017-12-18 15:16:2715-16赛季CBA联赛之天津
日期:2017-12-27 15:06:1515-16赛季CBA联赛之八一
日期:2018-01-05 13:00:4215-16赛季CBA联赛之福建
日期:2018-01-10 13:36:2115-16赛季CBA联赛之八一
日期:2018-02-01 12:27:0215-16赛季CBA联赛之江苏
日期:2018-02-02 19:44:2515-16赛季CBA联赛之北京
日期:2017-08-29 14:01:4415-16赛季CBA联赛之福建
日期:2017-07-31 21:47:52CU十四周年纪念徽章
日期:2017-07-13 10:10:21
发表于 2007-06-08 10:08 |显示全部楼层
各操作系统都不存在这个问题, 太古老了.

论坛徽章:
0
发表于 2007-06-08 10:09 |显示全部楼层
TO yulc,

问题不存在了从2。2。9? 谢谢你的结论。

估计是早期的什么地方存在。后来的应该不存在了。

因为KERNEL在该唤醒许多PROCESS中的一个时候,它唤醒一个是很简单和自然的事情,为什么不这样?

如果唤醒许多,执行了又回到等待(甚至连KERNEL都没有走出来),那浪费时间空间,又没有意义。所以
从LINUX某版本后,该问题应该没有了。

所以,也不能说权威书是完全错的。对原来可能是对的。


原帖由 yulc 于 2007-6-8 10:03 发表
版主的专研精神,真是PFPF...
纠正了我很长时间来,在linux中对于多进程服务器设计上的一个细节概念.
由于在Apache2的prefork MPM的模型中,是在accpet前面加锁,所以我潜意识中认为这种设计是更优的.
但却从未考虑 ...

论坛徽章:
0
发表于 2007-06-08 12:12 |显示全部楼层
accept来说,资源是EXCLUSIVE
但是select就不是了,一个文件可以读,如果有两个进程要读,那么应该唤醒两个。

论坛徽章:
0
发表于 2007-06-08 12:14 |显示全部楼层
就算唤醒n个进程,如果得不到资源,那么也到不了user态了,马上又阻塞的kernel态
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

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

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

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

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP