社区
C++ 语言
帖子详情
线程频繁挂起和唤醒,会有什么效率上的影响
gucheng789
2014-05-01 10:55:59
有一个线程用来处理用户主逻辑,用户逻辑数据包可能会很多,这个线程大多数时间都是在执行,但总有闲的时候,
现在对这个线程控制有两种方式:
1.为线程加上挂起和唤醒的功能,但是不知道线程频繁的挂起和唤醒操作会不会影响效率。
2.直接 sleep(), 延迟的时间根据上一次的数据处理量。
请前辈指点一下,线程频繁的挂起和唤醒 在Linux 或win 下的不同和效率。
...全文
734
10
打赏
收藏
线程频繁挂起和唤醒,会有什么效率上的影响
有一个线程用来处理用户主逻辑,用户逻辑数据包可能会很多,这个线程大多数时间都是在执行,但总有闲的时候, 现在对这个线程控制有两种方式: 1.为线程加上挂起和唤醒的功能,但是不知道线程频繁的挂起和唤醒操作会不会影响效率。 2.直接 sleep(), 延迟的时间根据上一次的数据处理量。 请前辈指点一下,线程频繁的挂起和唤醒 在Linux 或win 下的不同和效率。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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下均是有效率影响的,会涉及到内核态和用户态的切换。
Java多
线程
精讲上
本课程是《零基础学Java》系列课程中的多
线程
相关课程.授课形式延续了之前课程的授课风格。内容细腻、详尽,由浅入深!通过本门课程的学习你可以深刻理解Java多
线程
的原理及实现运行机制,深刻学习多
线程
的生命周期、调度、控制等内容。本门课程(多
线程
精讲上)涵盖内容如下:
线程
概述l 多
线程
的实现方案(2种)l
线程
的生命周期l
线程
的调度l
线程
的控制l 多
线程
的相关练习(卖票)
DELPHI
线程
类
挂起
的问题
DELPHI
线程
类
挂起
的问题 ——赵海杰对于用过Delphi的TThread类的兄弟应该很了解,在Tthread中有个Suspended属性,如果Suspended属性为True时,则表示
线程
是
挂起
状
【生产问题记录】一次 CPU 占用率过高的问题排查 (不断创建
线程
和
线程
上下文
频繁
切换)
至此, 整个 CPU 占用率高的排查过程就结束了, 后面再对整个过程做个总结通过比较
线程
栈的信息, 定位到了 @Async 注解的实现中, 通过不断创建
线程
执行任务的, 这个行为
会
导致 CPU 消耗资源在重量级对象 Thread 的创建和消毁中第二次通过观察
线程
栈信息, 定位到大量的
线程
阻塞在日志输出处, 执行的任务也是在输出日志, 猜测是
频繁
的日志打印, 导致
线程
上下文切换, 通过减少日志打印进行验证结论。
线程
-休眠和
唤醒
ThreadState是一个枚举类型,它反映的是
线程
所处的状态。当一个Thread实例刚创建时,它的ThreadState是Unstarted;当此
线程
被调用Start()启动之后,它的ThreadState是 Running; 在此
线程
启动之后,如果想让它暂停(阻塞),可以调用Thread.Sleep() 方法,它有两个重载方法(Sleep(int )、Sleep(Timespan )),
线程
阻塞的代价
在看多
线程
的时候,为了解决多
线程
下的对数据操作的原子性问题,往往采用synchronized同步锁,但是synchronized是通过加锁来实现的,对于未获得锁的
线程
,对数据进行读操作时,
会
被阻塞
挂起
,阻塞和
唤醒
是非常消耗资源的,那时候不明白
线程
阻塞
挂起
以及
唤醒
是如何消耗系统资源的,网上大多数是说
线程
的上下文切换和
线程
的调度消耗系统资源,还是讲的不够清楚,这几天一直在研究这个问题,今天写一下自己的...
C++ 语言
64,663
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章