免费注册 查看新帖 |

Chinaunix

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

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

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

论坛徽章:
0
2 [报告]
发表于 2007-06-08 12:14 |显示全部楼层
就算唤醒n个进程,如果得不到资源,那么也到不了user态了,马上又阻塞的kernel态

论坛徽章:
0
3 [报告]
发表于 2007-06-08 12:40 |显示全部楼层
通常我么
poll+read的时候都没有注意,如果是多个进程,那么我们很可能需要在poll返回时非阻塞的读,否则,即使poll返回了,也可能导致后果很严重的阻塞

论坛徽章:
0
4 [报告]
发表于 2007-06-08 12:57 |显示全部楼层
版主说的其实是一个waker函数决定的。
阻塞在某个地方的代码处,那么对应的waker也知道该怎么去唤醒等待队列。原则就是是不是排他的。它自己知道
对于poll,select,就算给一个进程读,也有可能本来有100字节,可是每个进程只要40个字节,那么肯定要唤醒,内核waker并不知道进程将来的read要读多少字节。即使只有3字节,有100个进程在等也要唤醒,它不会去检查

论坛徽章:
0
5 [报告]
发表于 2007-08-30 17:35 |显示全部楼层
原帖由 空灵静世 于 2007-8-30 17:32 发表
我刚刚做了个测试,两个线程都等在同一个socket的read上,当收到客户端的数据的时候,只有一个read返回


想说明什么?
这个线程没有醒来?

论坛徽章:
0
6 [报告]
发表于 2007-09-10 15:09 |显示全部楼层
原帖由 空灵静世 于 2007-8-31 09:12 发表
有个线程就一直停留在read调用上的,
我客户端发送的是6000多个字节,
read的第三个参数都是10000


这个并不能说明这个线程没有被唤醒,可能只是它没有到用户态而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP