1

我有很多任务,我想一次执行几个。正常的解决方案是线程池。但是,我的任务需要只有某些线程拥有的资源。所以我不能只将任务分配给任何旧线程;线程必须拥有任务所需的资源。

似乎应该有一个并发模式,但我似乎找不到它。我在 Python 2 中通过多处理实现了这一点,所以这些术语的答案会很好,但是通用的解决方案很好。在我的情况下,“线程”实际上是独立的操作系统进程,资源是网络连接(不,它不是服务器,所以 (e)poll/select 不会有帮助)。一般来说,一个线程/进程可以拥有多个资源。

这是一个幼稚的解决方案:将任务放在工作队列中,然后将我的线程池放在上面。让每个线程检查“我可以执行此任务吗?” 如果是,就去做;如果不是,则将其放回队列中。但是,如果每个任务只能由 N 个线程中的一个来完成,那么我正在做大约 2N 个昂贵的、浪费的对共享队列的访问,只是为了获得一个工作单元。

这是我目前的想法:每个资源都有一个共享的工作队列。将任务分配到匹配队列。每个线程检查它可以处理的队列。

想法?

4

1 回答 1

0

一种常见的方法是不为线程分配资源并将适当的资源与数据一起排队,尽管我理解如果资源绑定到特定线程,这并不总是可行的。

每个资源使用一个队列,线程只从包含它可以处理的对象的队列中弹出对象的想法可能有效。

可以使用按资源索引的信号量+并发队列数组来发送此类线程的信号并提供优先级系统,从而消除大部分轮询和浪费的重新排队。我将不得不更多地考虑这一点 - 这有点取决于资源如何映射到线程。

于 2012-06-16T21:19:59.207 回答