1
scenix 2015-12-24 17:41:03 +08:00
其实你的需求不是动态调整线程数量,而是动态调整在干活的线程数量。
一个简单的解决方案,来个全局变量 N 。你想要几个线程,就设置 N 是几。 给每个线程一个 id ,运行的时候读 N 的值,如果 id>=N, 就 sleep 。 感觉妥妥的 |
2
gamexg 2015-12-24 17:46:59 +08:00
加个 Semaphore ,工作者每次取队列前调用 acquire ,需要减少线程时另开一个线程多次调用 acquire 即可。
或者设置一个全局变量表示需要减少的线程数量,工作线程每次取队列前检查这个变量如果不为 0 就-1 并结束当前工作者线程。 |
3
SparkMan 2015-12-25 13:27:32 +08:00
1 、很傻但实用的方法:创建 2 个线程池,闲得时候任务提交到 10 个线程的池子中;忙得时候提交到 2 个线程的池子中。
|
4
bug0day 2015-12-25 13:52:11 +08:00
不要试图调整线程, ratelimit 就 ok 了啊
|
5
quietin 2015-12-29 14:51:00 +08:00
调整线程成本太高,因为会有内核态用户态切换,不是数量特别多没有必要管理
|
6
sbmzhcn OP 我最后用线程池解决的。
|