是否可以有一组线程池共享一个大线程池中的线程,而不是创建新线程?

在我们的RESTful API应用程序中,一个请求可能涉及多个并行任务。为了提高性能,我们希望在具有固定数量(例如200个)线程的线程池中执行并行任务。但是我们也想限制每个请求可以使用的最大线程数。因此,我在考虑是否有可能为每个请求创建一个具有最大池大小的子线程池,它不会自行创建线程,而是尝试从全局线程池中获取新线程并将作业放入队列(如果存在)没有可用的线程。

有人做过类似的事情吗?还是有其他更好的解决方案?

谢谢!!

最佳答案

可以考虑执行程序,而不是线程池。执行程序由两部分组成:作业队列和线程池。您需要的是每个请求的轻量级执行程序,该请求程序具有作业队列但没有线程。相反,它将作业从其队列传递到主执行程序(拥有所有线程)。诀窍是,轻量级执行器会计算已提交给主执行器的作业数量,并在数量超过限制时停止传递作业。每个作业在传递给主执行器之前,都包装在Runnable类型的对象中,该对象a)对父级轻量级执行器的引用,b)执行该包装的作业,并且c)当作业为完成,以便执行者可以将另一个作业传递给主执行者(或者,如果队列中没有作业,则减少作业计数器)。

09-12 02:35