社区
Linux/Unix社区
帖子详情
为什么多线程下recv不阻塞?
broadury
2005-10-03 01:09:31
现在在做一个代理服务器,需要用到多线程。
一个线程一直在接收数据,另一个一直发送。
但是当接收进程将数据接收完毕之后,继续recv,这时候按我想的话,线程应该阻塞在这里,但是结果是一直收到长度为0的数据,并没有阻塞(抓包看出其实并没有数据进来)。
所以导致CPU占用率很高
大家有没有什么好的主意?伤脑筋啊!
...全文
227
3
打赏
收藏
为什么多线程下recv不阻塞?
现在在做一个代理服务器,需要用到多线程。 一个线程一直在接收数据,另一个一直发送。 但是当接收进程将数据接收完毕之后,继续recv,这时候按我想的话,线程应该阻塞在这里,但是结果是一直收到长度为0的数据,并没有阻塞(抓包看出其实并没有数据进来)。 所以导致CPU占用率很高 大家有没有什么好的主意?伤脑筋啊!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
darkstar21cn
2005-10-04
打赏
举报
回复
每次接收为0时,说明没有数据,线程就应该进入休眠。usleep(纳秒)
daemeon
2005-10-03
打赏
举报
回复
非阻塞的方式, recv的返回值应该是-1, errno是EAGAIN.
tb01412
2005-10-03
打赏
举报
回复
那不是多线程的问题,而是你有可能以非阻塞的方式来处理的,你可以试一下单线程来读数据,看是不是也不阻塞?
socket
多线程
例程 非
阻塞
模式
vc++6.0 编写socket
多线程
例程,非
阻塞
模式,客户端 服务器端源代码,可运行
普通的SOCKET
多线程
阻塞
模型
最普通的Socket
多线程
阻塞
通信模型
windows下基于select模式的TCP客户端(Qt
多线程
工程)
windows下基于select网络模式的TCP客户端源码。使用
多线程
处理接收(Qt
多线程
工程),select模型解决了实现多个客户端链接,与多个客户端分别通信 两个模型都存在
recv
(),send()执行
阻塞
问题
Python实现socket非
阻塞
通讯功能示例
本文实例讲述了Python实现socket非
阻塞
通讯功能。分享给大家供大家参考,具体如下: 非
阻塞
需要
多线程
编程 服务端 方式1: 使用threading库实现
多线程
基本方法和单进程基本写法一致, 将收发部分封装为函数以便开启其他线程: import socket import time import threading def handle_socket(conn, addr): while True: data = conn.
recv
(1024) print(data.decode('utf-8')) time.sleep(3) send_data
selectors 非
阻塞
通讯
一.简介 使用socket
阻塞
通讯时,当程序调用
recv
() 方法从socket 中读取数据时,如果没有读取到数据时,当前线程将会被
阻塞
,因此为了解决这个问题采用了
多线程
的方式,制约了服务器高并发的访问。 selectors 模块允许socket 以非
阻塞
的方式进行通信,selectors 相当于事件注册中心,程序只要将所有事件注册给selectors 管理,当selectors 检测到socket 中的特定事件后,程序就调用相关的监听方法进行处理。 selectors 主要支持两种事件: selectors.EVENT_READ:当socket 有数据可读时触发该事件。当客户端连接进来时也
Linux/Unix社区
23,215
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章