一百个休眠的子线程会大量消耗系统资源吗?

Necromancerr 2002-12-19 12:24:01
子线程含有阻塞代码。现有两种方案:

一。平时程序只有一个主线程,一遇到请求就同时产生一百个子线程。所有子线程处理完后就ExitThread。
二。平时保持着一百个休眠的子线程,当主线程遇到请求时就一一唤醒子线程们进行处理。子线程们处理完后就进入体眠状态。

我知道过多的活动子线程会令系统消耗大量的CPU时间在切换到不同线程,但休眠线程还需要系统切换以致消耗CPU时间吗?
...全文
599 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianliang79 2002-12-19
  • 打赏
  • 举报
回复
我个人认为你的第二个方案比较可行,第一个方案绝对不可行。有一点你要清楚,处于阻塞态的线程是不占任何cpu资源的,如果你读过任何一个操作系统(比如linux)的内核源代码就会明白这一点。所以当100个线程处于阻塞态时,仅仅是占用一些内存,只有当被阻塞的线程被唤醒时才有可能被调度程序调度,因此我觉得你的第二个方案可行,而第一个方案一次要启动太多的线程,如果比较频繁,将会使效率大大降低。
aben456 2002-12-19
  • 打赏
  • 举报
回复
服务器一般视内存如粪土,2是可以的
如果你是PC,就不要这么做了
afc 2002-12-19
  • 打赏
  • 举报
回复
不会的,apache的win32版默认开了250个线程等待请求,在普通pc上也没看到有什么速度影响
cuihl 2002-12-19
  • 打赏
  • 举报
回复
100个确实有点多,不过要看你的需求了。如果有必要,用第二种方案也可以,有时还可以提高效率。
XDT 2002-12-19
  • 打赏
  • 举报
回复
休眠的线程CPU分配的优先级很底,所以CPU占用是不太大的。就算不占用CUP,占用内内存存也是不好的,不如一一创建
Hawk_lp 2002-12-19
  • 打赏
  • 举报
回复
休眠线程还需要系统切换以消耗CPU时间!!

具体说说怎么同时产生一百个子线程????
Necromancerr 2002-12-19
  • 打赏
  • 举报
回复
读后感:

1.内存如粪土
2.我觉得一百个"唤醒"动作要比一百个"启动"动作要快多了。
3.会阻塞的线程means不是全力工作,不会累坏服务器。
NowCan 2002-12-19
  • 打赏
  • 举报
回复
100个不算什么,不过要是100个线程都在全力工作,还不把机器累死。
microyzy 2002-12-19
  • 打赏
  • 举报
回复
为什么不找一个平衡点?比如先保持50个,然后需要的时候再另建50个?
jeffchen 2002-12-19
  • 打赏
  • 举报
回复
我觉得可以这样:先分配一定数量的线程。等线程不够用了,再分配。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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