作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个多线程程序,每个线程都是这样的:
thread() {
connect();
while(1) {
recv();
do_some_work();
}
}
如果您用 sleep(5) 交换 do_some_work() 来模拟一个负载,该负载会阻塞线程并阻止其到达它的 recv() 调用所有其他线程在 recv() 处阻塞线程 sleep() 的时间。我可以使用 WireShark 看到收到的数据,这些数据是视频流,因此它们永远不会停止发送。
我想知道为什么当 WinSock(2,2) 应该是多线程时该线程会阻塞所有其他线程?
预期行为:它不应阻塞其他线程。
更新:当单个客户端不读取发送给它的内容时,服务器似乎会阻止所有客户端。我将其归咎于糟糕的服务器设计。
最佳答案
当单个客户端不读取发送给它的内容时,服务器似乎会阻止所有客户端。我可以猜测它是管理所有连接和 send() block 的单个线程,因为它不使用 select() 或类似的东西。
关于c - 单线程在 WinSock recv() 处阻塞所有其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34840328/
我是一名优秀的程序员,十分优秀!