线程频繁挂起和唤醒,会有什么效率上的影响

gucheng789 2014-05-01 10:55:59

有一个线程用来处理用户主逻辑,用户逻辑数据包可能会很多,这个线程大多数时间都是在执行,但总有闲的时候,
现在对这个线程控制有两种方式:
1.为线程加上挂起和唤醒的功能,但是不知道线程频繁的挂起和唤醒操作会不会影响效率。
2.直接 sleep(), 延迟的时间根据上一次的数据处理量。

请前辈指点一下,线程频繁的挂起和唤醒 在Linux 或win 下的不同和效率。
...全文
734 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2014-05-04
  • 打赏
  • 举报
回复
线程上下文切换肯定是额外的开销。 如果从“闲”到“忙”的过度时间较长的话, 这种开销是合理的。否则, 就要考虑是否有必要“挂起”了。 可以多尝试检查是否有待处理的任务, 尝试一定次数之后,就可以睡去直到有任务将其唤醒。
赵4老师 2014-05-04
  • 打赏
  • 举报
回复
《Windows核心编程》 《深入解析Windows操作系统-Windows Internals》
lm_whales 2014-05-04
  • 打赏
  • 举报
回复
Windws Sleep 只有时间到才会执行,这样如果Sleep中途,需要响应; 那么毫无办法,因为Sleep把线程挂起了。
lm_whales 2014-05-04
  • 打赏
  • 举报
回复
Windws Sleep不能及时响应,不过可以用SleepEx 如果是等待同步信号(信号灯,互斥量,事件)挂起线程,那就能够及时响应. Windows 下,一般不需要主动挂起线程,让他在同步中自然挂起最好了; 既不额外增加CPU时间开销,也不会过分延迟响应。 这种响应的延迟,可以忽略,因为同步的响应是很快的。
不要做咸鱼 2014-05-04
  • 打赏
  • 举报
回复
注定不会频繁的挂起和唤醒吧,除非你用户很少。。。
derekrose 2014-05-01
  • 打赏
  • 举报
回复
还是2吧
taodm 2014-05-01
  • 打赏
  • 举报
回复
楼主,sleep难道不也是挂起么。
碼上道 2014-05-01
  • 打赏
  • 举报
回复
建议加个接收数据的队列,另外从你的情况来看,挂起和唤醒没有关系,你这个也不算很频繁了。
ErrorErro 2014-05-01
  • 打赏
  • 举报
回复
会浪费CPU的时钟周期吧
gucheng789 2014-05-01
  • 打赏
  • 举报
回复
主逻辑线程处理几百个或几千个玩家的数据,应该会很频繁,但是具体怎么频繁要看在线的玩家数量和玩家的操作。
碼上道 2014-05-01
  • 打赏
  • 举报
回复
频繁具体到什么地步,每秒切换多少次? 频繁挂起和唤醒在linux,win下均是有效率影响的,会涉及到内核态和用户态的切换。

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧