This topic created in 3818 days ago, the information mentioned may be changed or developed.
最近用到线程池, 10 个线程处理队列,但现在有这样一个需求:
在某些时候我希望线程池中的线程只有 2 个在工作,因为此时过多的请求网络会导致失败。
在其它时间希望线程池中的线程数量有 10 个左右。
请问如何在程序运行的时候调节线程数量?
我查了下网上的方案都是开始就固定好线程池中的线程数量了。
6 replies • 2015-12-30 20:34:45 +08:00
 |
|
1
scenix Dec 24, 2015
其实你的需求不是动态调整线程数量,而是动态调整在干活的线程数量。
一个简单的解决方案,来个全局变量 N 。你想要几个线程,就设置 N 是几。
给每个线程一个 id ,运行的时候读 N 的值,如果 id>=N, 就 sleep 。
感觉妥妥的
|
 |
|
2
gamexg Dec 24, 2015
加个 Semaphore ,工作者每次取队列前调用 acquire ,需要减少线程时另开一个线程多次调用 acquire 即可。
或者设置一个全局变量表示需要减少的线程数量,工作线程每次取队列前检查这个变量如果不为 0 就-1 并结束当前工作者线程。
|
 |
|
3
SparkMan Dec 25, 2015
1 、很傻但实用的方法:创建 2 个线程池,闲得时候任务提交到 10 个线程的池子中;忙得时候提交到 2 个线程的池子中。
|
 |
|
4
bug0day Dec 25, 2015
不要试图调整线程, ratelimit 就 ok 了啊
|
 |
|
5
quietin Dec 29, 2015
调整线程成本太高,因为会有内核态用户态切换,不是数量特别多没有必要管理
|