社区
网络编程
帖子详情
socket recv阻塞时是否占用CPU
cc_net
2010-12-09 03:41:04
客户端,在使用阻塞模式socket时,每一个SOCKET连接用一个线程recv接受数据
多线程SOCKET,如果没有数据,recv阻塞,这个时候是否会占用CPU?
目前在手机上CPU占用过高,不知道是否和这个有关?
我给recv设置超时时间,如果超时就sleep一下,然后再recv,这样是否可行。
只讨论阻塞模式下的recv.
...全文
759
6
打赏
收藏
socket recv阻塞时是否占用CPU
客户端,在使用阻塞模式socket时,每一个SOCKET连接用一个线程recv接受数据 多线程SOCKET,如果没有数据,recv阻塞,这个时候是否会占用CPU? 目前在手机上CPU占用过高,不知道是否和这个有关? 我给recv设置超时时间,如果超时就sleep一下,然后再recv,这样是否可行。 只讨论阻塞模式下的recv.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luowei886
2012-11-11
打赏
举报
回复
大数据处理,内存计算,云计算,云存储,云会议技术研究群123749520
cc_net
2010-12-09
打赏
举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]
int nTimeOut = 3000; // 超时值为3s
setsockopt(SOCKET, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOut, sizeof(nTimeOut));
[/Quote]
恩,我已经修改好了。
Eleven
2010-12-09
打赏
举报
回复
int nTimeOut = 3000; // 超时值为3s
setsockopt(SOCKET, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOut, sizeof(nTimeOut));
yihandrensunyong
2010-12-09
打赏
举报
回复
[Quote=引用 2 楼 cc_net 的回复:]
那就是阻塞时还是占用CPU时间,只是时间片到了切换到其他线程?
那我设置超时,如果超时,主动sleep放弃CPU,这样应该可以减少CPU占用吧。
[/Quote]
正解
cc_net
2010-12-09
打赏
举报
回复
那就是阻塞时还是占用CPU时间,只是时间片到了切换到其他线程?
那我设置超时,如果超时,主动sleep放弃CPU,这样应该可以减少CPU占用吧。
小马喝水
2010-12-09
打赏
举报
回复
阻塞的时候线程还是会处在可调度状态,会占用CPU,如果开的线程不是很多的话,recv阻塞的话影响应该不会很大的
socket
阻塞
与
socket
非
阻塞
socket
阻塞
与 非
阻塞
1 概念理解 其实在我们在进行网络编程,在理解
阻塞
与非
阻塞
同
时
,还应该清楚同步与异步!同步与
阻塞
同步和
阻塞
是不同的,可是有
时
候在理解有会很模糊; 同步:事情一件件的做,做完一件返回一件,做不完不回复也不返回。
阻塞
;
阻塞
调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,
cpu
不会给线程分配
时
间片,即线程暂停运行)。函数只有在得到结果之
为什么网络
socket
编程是
阻塞
的?因为非
阻塞
轮询占
CPU
,用多线程和IO复用
2020.8.27一直不明白为什么网络
socket
编程默认都是
阻塞
的,
阻塞
了程序不就停了不响应了吗,好纠结。现在有点了解了,
阻塞
时
是等待状态,类似于内核把它sleep,不
占用
CPU
,对操作系统正常运转是非常有利的。非
阻塞
方式:程序不会停止响应,
socket
函数会马上返回,但程序需要一直轮询
socket
,如果
socket
没有动作,那其实就是在while(1)啊,
CPU
占用
是100%啊。不行啊,操作系统要完蛋的。所以还是用
阻塞
方式吧,内核已经把最优方案给我们了。但是,一个
socket
这么用是没问题的,多个soc
socket
阻塞
与非
阻塞
实验(
recv
或read读返回值)(带实例)
状态处于睡眠和运行中交替执行,且
cpu
占用
率高。 屏蔽以下两行。 int flags = fcntl(sfd, F_GETFL, 0); //获取文件的flags值。 fcntl(sfd, F_SETFL, flags | O_NONBLOCK); //设置成非
阻塞
模式;
阻塞
在accept这里。不执行了。 进程状态如下,一直处于sleep状态中,且不
占用
cpu
.客户端程序: 2.1服务器端
阻塞
的cfd 1)此
时
listenfd为
阻塞
态
操作系统面试题:进程如何
阻塞
?进程
阻塞
为什么不
占用
CPU
?
文章目录进程如何
阻塞
?进程
阻塞
为什么不消耗
CPU
?1. 计算机是如何接收数据的2. 计算机如何知道要接受数据?3. 进程
阻塞
为什么不
占用
CPU
资源?3.1 工作队列3.2 等待队列3.3 唤醒进程3.4 内核接收网络数据全过程3.5 进程
阻塞
为什么不消耗
CPU
? 进程如何
阻塞
?进程
阻塞
为什么不消耗
CPU
? 要想明白进程如何
阻塞
,
阻塞
为什么不消耗
CPU
,就要先明白 计算机是如何接受数据的 计算机如何知道什么
时
候要接收数据 1. 计算机是如何接收数据的 从网卡接收数据说起: 下边是一个典型的计算机结构图
recv
函数linux,linux 下调用
recv
函数,死循环在
recv
函数里面,什么原因?
linux 下调用
recv
函数,死循环在
recv
函数里面,什么原因?linux服务器,在连接只有1000个
时
候,一切正常,到连接到2000以上的
时
候,就死循环在
recv
函数里面,
cpu
占用
率很高,因为
recv
是系统函数,也不知道他在里面干什么。程序是epoll实现的。 有谁碰到过类似问题么?或者是能指导一个努力的方向? 回1楼:不是建立连接的
时
候死循环,而是跑了一段
时
间后,在调用
recv
函数的
时
候...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章