保持大量独立长期运行任务的有效方法?

时间:2012-12-03 06:25:28

标签: multithreading

需要同时收听来自数千个(以及将来可能更多)IMAP服务器的响应。什么是有效的方法呢?

我能想到的唯一解决方案是为每个连接创建一个线程。这是要走的路吗?

仅供参考,我将在Ruby中实现这一点,但我想选择的语言对于这个问题并不重要。

2 个答案:

答案 0 :(得分:2)

它是一个简单且经过测试的解决方案:

1)请求每个插槽的侦听器线程,您必须从中请求侦听请求(如果是一个套接字则为1,等等)

2)将请求放入处理队列(像生产者一样)

3)服务主题将接收这些请求并对其进行处理(消费者)。您可以拥有多个消费者线程。

注意:服务线程应始终使用Executors Framework,以便将工作重新分配给线程并重用线程。

答案 1 :(得分:1)

每个线程的连接只会导致thread-starvation,并且根本不建议。如果你自己这样做,那么我会推荐一个大小的线程池(从核心数+1开始。我认为你仍然可以增加大小,因为它主要是I / O.Profile并保持较高的数量)。

(我不知道ruby和线程(Ruby我猜有GIL个问题)所以可能是一个过程)

但建议让网络服务器为您完成。例如,使用一个接收请求的Web服务器并执行逻辑。 Web服务器的设计比手动调整更适合处理这种情况。