1

需要同时收听来自数千个(未来可能更多)IMAP 服务器的响应。有什么有效的方法来做到这一点?

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

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

4

2 回答 2

2

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

1)每个套接字的请求侦听器线程,您必须从中侦听请求(如果一个套接字则为 1,依此类推)

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

3)拥有将接受这些请求并处理它们的服务线程(消费者)。您可以有多个消费者线程。

注意:服务线程应始终使用执行器框架,以便将工作重新分配给线程并重用线程。

于 2012-12-03T12:52:44.083 回答
1

每个线程的连接只会导致线程饥饿,完全不推荐。如果你自己做,那么我会推荐一个大小的线程池(从核心数 +1 开始。我认为你仍然可以增加大小,因为它主要是 I/O。配置文件并保持上限)。

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

但推荐的是让网络服务器为你做这件事。例如,使用一个接受请求的网络服务器并执行逻辑。Web 服务器的设计比手动调整更适合处理这种情况。

于 2012-12-03T06:31:48.140 回答