作者:烟轻舞 | 来源:互联网 | 2023-05-16 02:53
子线程含有阻塞代码。现有两种方案:一。平时程序只有一个主线程,一遇到请求就同时产生一百个子线程。所有子线程处理完后就ExitThread。二。平时保持着一百个休眠的子线程,当主线程遇到请求
子线程含有阻塞代码。现有两种方案:
一。平时程序只有一个主线程,一遇到请求就同时产生一百个子线程。所有子线程处理完后就ExitThread。
二。平时保持着一百个休眠的子线程,当主线程遇到请求时就一一唤醒子线程们进行处理。子线程们处理完后就进入体眠状态。
我知道过多的活动子线程会令系统消耗大量的CPU时间在切换到不同线程,但休眠线程还需要系统切换以致消耗CPU时间吗?
10 个解决方案
休眠的线程CPU分配的优先级很底,所以CPU占用是不太大的。就算不占用CUP,占用内内存存也是不好的,不如一一创建
100个确实有点多,不过要看你的需求了。如果有必要,用第二种方案也可以,有时还可以提高效率。
服务器一般视内存如粪土,2是可以的
如果你是PC,就不要这么做了
我觉得可以这样:先分配一定数量的线程。等线程不够用了,再分配。
为什么不找一个平衡点?比如先保持50个,然后需要的时候再另建50个?
100个不算什么,不过要是100个线程都在全力工作,还不把机器累死。
读后感:
1.内存如粪土
2.我觉得一百个"唤醒"动作要比一百个"启动"动作要快多了。
3.会阻塞的线程means不是全力工作,不会累坏服务器。
休眠线程还需要系统切换以消耗CPU时间!!
具体说说怎么同时产生一百个子线程????
不会的,apache的win32版默认开了250个线程等待请求,在普通pc上也没看到有什么速度影响
我个人认为你的第二个方案比较可行,第一个方案绝对不可行。有一点你要清楚,处于阻塞态的线程是不占任何cpu资源的,如果你读过任何一个操作系统(比如linux)的内核源代码就会明白这一点。所以当100个线程处于阻塞态时,仅仅是占用一些内存,只有当被阻塞的线程被唤醒时才有可能被调度程序调度,因此我觉得你的第二个方案可行,而第一个方案一次要启动太多的线程,如果比较频繁,将会使效率大大降低。