我目前有一个具有大量线程的应用程序,这使该应用程序变得非常大。每个线程都是长期运行的,基本上是一个无限循环的轮询新电子邮件,然后对其进行处理。每个线程都保持一个SSL连接,这就是为什么线程适合于应用程序的原因。

我想使用线程池。最简单的方法是只固定线程数,然后每个线程增加10个用户,但即使到那时,由于每个循环的处理时间都很长,它似乎并没有像1个用户/线程那样均衡地平衡工作。另外,这实际上不是线程池。

我的问题是-这里合适的设计模式是什么(因为它肯定比我上面写的更聪明),并且有一个C++库可以很好地处理这一问题吗?将我指向Java实用程序也将很有帮助,因为根据我的经验,很容易从Java实用程序中得出设计模式。

最佳答案

一个用户/线程可能是一个很好的起点。任何阻塞或可以阻塞的东西都需要在其自己的线程中运行,以避免阻塞或被其他正在执行的代码阻塞。如果电子邮件的实际处理将直接进行,则可以将其放置在“可运行”中以使用Java术语,然后提交给线程池。 Java术语是ThreadPoolExecutor,自己写一个简单的书并不难。您希望每个可能的CPU内核都有一个线程,以从计算机中获得最大的工作量。

如果每个电子邮件的工作量不是那么好,则跳过线程池并仅在阅读器线程上进行工作可能会更简单,更快。您已经支付了运行它的成本,您可能还需要花所有精力。

另一方面,如果处理电子邮件涉及阻止或被阻止,则可能要为每个电子邮件启动一个新线程。您最终可能会有很多线程,但是它将最大程度地减少计算机的工作量。您不希望在CPU利用率仅为5%的情况下落后于电子邮件。

09-05 00:15