1. 所有传入作业都具有相同的性质,并且可以由池中的任何线程处理。
2. 传入的作业将基于传入作业的某些属性被“分桶”到不同的队列中,以使所有进入同一桶/队列的作业必须串行处理。
3. 在程序生命周期的不同阶段,某些存储区比其他存储区要不忙。
我的问题是关于线程池实现背后的理论。什么算法可用于有效地将可用线程分配给所有存储区中的传入作业?
编辑:另一个设计目标是尽可能消除作业在入队时和被选中处理之间的延迟,假设有可用的空闲线程。
编辑2:在我考虑的情况下,有大量队列(50-100个),其活动水平不可预测,但在任何给定时间可能只有25%的队列处于活动状态。
我能想到的第一个(也是最昂贵的)解决方案是仅为每个队列分配1个线程。虽然这将确保立即获取传入请求,但显然效率低下。
第二个解决方案是基于预期的活动水平将队列合并在一起,使队列数与池中线程数保持一致,允许为每个队列分配一个线程。问题在于,否则可以并行处理的传入作业将被迫互相等待。
第三种解决方案是创建最大数量的队列,为必须串行处理的作业集的每个集分配一个队列,但仅根据我们预计在任何给定时间内要忙碌的队列数(也可以在运行时由池进行调整)分配线程。这就是我的问题所在:假设队列比线程多,池如何以最有效的方式将空闲线程分配给传入作业?
我想知道是否有广泛接受的方法。还是说有不同的方法-谁使用了哪些方法?优缺点等是什么?
编辑3:这可能最好用伪代码来表达。