社区
进程/线程/DLL
帖子详情
线程开销的问题
奶糖人五号
2008-12-05 12:23:19
请问
1 如果使用waitforxxxx 这类的函数让线程阻塞,那么线程是否还会消耗CPU时间?
2 为什么一个空循环能让CPU使用率暴增,而里面加上些IO操作及waitforxxx函数 代码,就几乎不占什么时间了呢?按理说 那些代码操作都是在消耗CPU时间啊
一直没搞清楚,线程在 sleep,挂起,阻塞 三种状态下的 开销情况。
...全文
202
6
打赏
收藏
线程开销的问题
请问 1 如果使用waitforxxxx 这类的函数让线程阻塞,那么线程是否还会消耗CPU时间? 2 为什么一个空循环能让CPU使用率暴增,而里面加上些IO操作及waitforxxx函数 代码,就几乎不占什么时间了呢?按理说 那些代码操作都是在消耗CPU时间啊 一直没搞清楚,线程在 sleep,挂起,阻塞 三种状态下的 开销情况。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xdkui
2008-12-05
打赏
举报
回复
1. 不会, 系统会去调度别的线程. 只有wait的事件到达后才会调度这个线程, 所以这个线程不耗CPU
2. 空循环没有让出CPU, 一直占用CPU。 加上IO后,IO一般处于等待状态,系统也会调度别的线程。所以这个线程也不耗CPU时间
关键是你的线程在wait的时候,你看着时间长,但你的线程没有被执行,所以是别的线程在用CPU
ilovedrv
2008-12-05
打赏
举报
回复
[Quote=引用 3 楼 lx6636 的回复:]
楼上说的 同步函数是指啥? WaitForXXXX不是同步函数??
[/Quote]
主要是那种I/O访问之类,比如网络数据同步接收,只有等到数据才从函数中出来
cnzdgs
2008-12-05
打赏
举报
回复
线程处于休眠和等待状态时不占用CPU时间,执行I/O操作几乎都需要等待,所以CPU占用率较低。
奶糖人五号
2008-12-05
打赏
举报
回复
楼上说的 同步函数是指啥? WaitForXXXX不是同步函数??
ilovedrv
2008-12-05
打赏
举报
回复
1. 不占
2. 空循环? 空循环也有条件判断
sleep是暂时释放cpu,交由系统进行线程调度,平衡一下系统时间
挂起,是让线程不参与系统线程调度,没有开销
阻塞,如果是Wait之类,和挂起效果一样,但如果调用了一个同步函数,基本上会导致线程占用大量的时间片
yaozhu88
2008-12-05
打赏
举报
回复
学习
java
线程
开销
_多
线程
的
线程
开销
多
线程
中两个必要的
开销
:
线程
的创建、上下文切换创建
线程
:创建
线程
使用是直接向系统申请资源的,对操作系统来说,创建一个
线程
的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在
线程
切换的时候还要执行内存...
线程
开销
(.net)
因为
线程
本身也会有不小的
开销
。
开销
主要体现在两方面:1、空间
开销
,2、时间
开销
空间
开销
空间
开销
主要体现在以下四方面:
线程
内核对象(thread kernel object);
线程
环境块(thread environment block,TEB); ...
线程
引入的
开销
当
线程
无法获取某个锁或者由于在某个条件等待或在I/O操作上阻塞时,需要被挂起,在这个过程中将包含两次额外的上下文切换,以及所有必要的操作系统操作和缓存操作:被阻塞的
线程
在其执行时间片还未用完之前就被交换...
线程
切换的
开销
从单
线程
应用到多
线程
应用带来的不仅仅是好处。也会带来
开销
。不要仅仅在一个应用中使用多
线程
仅仅是因为你能够(会)使用多
线程
。你应该能确定使用多
线程
带来的好处要远远多于它带来...
线程
切换
开销
当一个cpu从一个线
多
线程
的
线程
开销
多
线程
中两个必要的
开销
:
线程
的创建、上下文切换 创建
线程
: 创建
线程
使用是直接向系统申请资源的,对操作系统来说,创建一个
线程
的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在
线程
切换的时候还要执行...
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章