繁体   English   中英

如何在并行执行上下文中找出我需要的N个线程?

[英]How to figure out N threads I need in a parallel execution context?

我正在重新交付系统中工作。 此系统尝试执行一个动作,如果该动作失败,它将尝试以五分钟的间隔再次执行两次,因此我将使用ExecutorService实现执行第一次执行,并使用ScheduledExecutorService来安排其他执行,具体取决于执行结果(失败)。

我应该考虑什么来确定所需的线程数? 目前,我仅使用一个线程模型(由newSingleThreadScheduledExecutor方法创建)

您一次只需要运行一个操作,因此只需要一个线程。 您可以使用CachedThreadPool而不用担心。

在不了解有关系统负载,系统正在使用的环境以及处理一条消息所需的时间的情况下,很难说出您需要多少线程。 但是,您可以考虑以下基本原则:

  1. 有很多线程是不好的,因为您将在上下文切换上花费大量时间,因此饥饿和浪费系统资源的机会更高。
  2. 每个线程都会为其堆栈占用一些内存空间。 x64 ,每个线程通常为1MB

我可能会为发送和重新交付创建2个线程池(一个预定的线程池,一个非预定的线程池),并在高负载下(从2到10)更改线程数来测试它们,以查看哪个数字最合适。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM