社区
进程/线程/DLL
帖子详情
大家节日愉快,关于线程CPU的问题
max_xy
2004-05-01 09:48:21
我做了一个客户端的线程类,这个线程不断地从服务器读取数据,然后处理。服务器端是不断地在一个while(1)里发送数据。我现在在我的客户端的线程里也是用while(1)来读取数据并且处理,现在发现CPU一般维持在20%左右(加了sleep(20)),但是问题是如果我同时开了4个线程,CPU就高达90%了。请问我该怎么办,有没有什么高招降低CPU啊。不用while循环,我用什么呢,这种情况下面。
...全文
80
6
打赏
收藏
大家节日愉快,关于线程CPU的问题
我做了一个客户端的线程类,这个线程不断地从服务器读取数据,然后处理。服务器端是不断地在一个while(1)里发送数据。我现在在我的客户端的线程里也是用while(1)来读取数据并且处理,现在发现CPU一般维持在20%左右(加了sleep(20)),但是问题是如果我同时开了4个线程,CPU就高达90%了。请问我该怎么办,有没有什么高招降低CPU啊。不用while循环,我用什么呢,这种情况下面。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
UDX协议
2004-05-03
打赏
举报
回复
BOOL CClientOverlappedSock::OnRead()
{
if(!IsConnected())
return false;
DWORD dwTransbit = 0;
DWORD Resv = 0;
DWORD dwFlag = 0;
WSABUF buffer;
BOOL bQuery = false;
int state = 0;
bQuery = WSAGetOverlappedResult( m_RecSocket, &ConnectedSocketOverlapped,
&dwTransbit,false,&dwFlag);
if(bQuery)
{
if(dwTransbit == 0)
{
OnClose();
return true;
}
while(1)
{
if( rPag.len - sizeof(PAG) == DataRes)
{
////
Work();
Reset();
////
buffer.buf = (char*)& rPag;
buffer.len = sizeof(PAG);
state = WSARecv( m_RecSocket,&buffer,1,&Resv,
&dwFlag, &ConnectedSocketOverlapped,NULL);
if(state == 0)
{
continue;
}else
{
DWORD err = WSAGetLastError();
if(err != WSA_IO_PENDING)
{
TRACE1("erro code1 %d\n",err);
OnClose();
return false;
}else
{
if(ERROR_IO_PENDING == err)
{
return true;
}
}
}
}else
if( rPag.len - sizeof(PAG) - DataRes > 0)
{
if(!m_bReadPending)
{
if(buff == NULL)
{
buff = new char [ rPag.len - sizeof(PAG)];
memset( buff,0, rPag.len - sizeof(PAG));
buffer.buf = buff;
buffer.len = rPag.len - sizeof(PAG);
}
Resv = 0;
buffer.len = rPag.len - sizeof(PAG) - DataRes;
buffer.buf = buff + DataRes;
state = WSARecv( m_RecSocket,&buffer,1,&Resv,
&dwFlag, &ConnectedSocketOverlapped,NULL);
if(state == 0)
{
DataRes+=Resv;
continue;
}else
{
DWORD err = WSAGetLastError();
if(err != WSA_IO_PENDING)
{
TRACE1("erro code2 %d\n",err);
OnClose();
return false;
}else
{
if(ERROR_IO_PENDING == err)
{
m_bReadPending = true;
return true;
}
}
}
}else
{
DataRes+=dwTransbit;
}
}
if(!IsConnected())
return 0;
Sleep(1);
TRACE1("RES DATA IS %u\n",DataRes);
}
}else
{
DWORD err = WSAGetLastError();
if(err != ERROR_IO_INCOMPLETE)
{
OnClose();
TRACE1("erro code3 %d\n",err);
return false;
}else
return true;
}
return true;
}
吐血回贴!
当没有数据来时,根本不占用cpu.
B2China
2004-05-02
打赏
举报
回复
呵呵,我的接收线程的问题和你一样:
帖子:
http://expert.csdn.net/Expert/topic/3027/3027977.xml?temp=.7697565
主题:
大家的接收线程是怎么实现的啊?怎么我的接收线程消耗CPU资源这么大啊?
期待答案!
halk
2004-05-01
打赏
举报
回复
Onega(www.fruitfruit.com) 说的有道理,阻塞的socket在阻塞期间处于等待状态,此时线程不可调度,因此不会分配给cpu时间;如果用非阻塞,则线程在while期间一直处于可调度状态,系统就会分配给cpu时间,即使这些时间都浪费在无用的循环上了。
max_xy
2004-05-01
打赏
举报
回复
呵呵,楼上的,估计没有仔细看我的第一个帖子。
Onega
2004-05-01
打赏
举报
回复
用while是使用阻塞式socket的方法,对于非阻塞的socket不能那么做
http://www.codersource.net/winsock_tutorial_server_event_model.html
http://www.codeproject.com/internet/networkevents.asp
max_xy
2004-05-01
打赏
举报
回复
我在while循环里用的是非阻塞socket,用SELECT模型的
多
线程
执行
CPU
过高
问题
在项目开发过程中使用到多
线程
技术,但
解决java
线程
cpu
飙升
问题
问题
发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新。前几天测试小姐姐对网站进行压力测试,观察服务的
CPU
、内存、load、RT、QPS等各种指标。 在压测的过程中,测试小姐姐发现我们其中一个接口,在QPS上升到400以后,
CPU
利用率急剧升高。 这里我仅对QPS及
CPU
利用率做简单的概述。 QPS每秒查询率,QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准...
记一次排查线上生产
cpu
线程
问题
记一次排查线上生产
cpu
线程
问题
问题
发生排查步骤结果优化方法
问题
发生 一天突然发现监控大屏
cpu
闲置率在80%左右,感觉不是很正常,现在需求不是很多,为什么
cpu
闲置率这么低,一般情况为95%以上,为了好奇开始了一次jvm
线程
的排查过程。 排查步骤 找出消耗
cpu
最高的pid ,第一种直接找到自己的项目名称,jps -l找到pid;第二种:top -c,如下图; 找出某pid下
线程
资源信息,...
线程
占用
CPU
高
问题
排查
对于
cpu
爆满
问题
,常常会分析是否存在
问题
线程
,本文记录一种通过top快速找到
问题
线程
nid的方式。通过top找到
问题
进程,例如下面有个进程
CPU
占用率高达99%,他的PID=270973。其中-p 270973表示查找指定进程270973的信息,-H表示
线程
模式。其中0x%x的0x是固定字符串,%x是printf的十六进制的转换类型。通过top -p 270973 -H查找
问题
线程
。经对比,发现
问题
线程
的PID=2447223。将
线程
PID转换为nid。
Android Studio自带Profiler工具进行
CPU
资源及
线程
问题
分析步骤
在 Android Studio Profiler 中,
CPU
分析中的 Trace Config 是用于配置你要收集的性能数据的设置。通过 Trace Config,你可以指定要采集的事件、采集的持续时间、采集的频率等内容。Sampling Interval(采样间隔):指定每次采样的时间间隔。较小的采样间隔能提供更精细的数据,但可能会增加性能开销。Method Tracing(方法追踪):允许你启用或禁用对应用程序方法的追踪,以便查看哪些方法消耗了
CPU
时间。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章