Java 确定最佳工作线程数

Java 确定最佳工作线程数,java,multithreading,concurrency,threadpool,java.util.concurrent,Java,Multithreading,Concurrency,Threadpool,Java.util.concurrent,想象一下,我们有x30,例如系统的数量。每个系统都有一个 必须对其进行操作的实体数组每个系统的实体数不同。因此,基本上,系统包含算法,实体包含要处理的数据。每个系统都可以指定它可以对哪些类型的实体进行操作,因此一个实体可以由多个系统进行操作 系统排列成一条链,这意味着我们按顺序运行,而不是并行运行。每次都以相同的顺序调用它们来对它们的实体进行操作,我们所要做的就是调用它们的System::process方法 该系统链每秒运行60次 目前,它的实现使系统在单个thred上运行,按顺序处理其实体。我

想象一下,我们有x30,例如系统的数量。每个系统都有一个 必须对其进行操作的实体数组每个系统的实体数不同。因此,基本上,系统包含算法,实体包含要处理的数据。每个系统都可以指定它可以对哪些类型的实体进行操作,因此一个实体可以由多个系统进行操作

系统排列成一条链,这意味着我们按顺序运行,而不是并行运行。每次都以相同的顺序调用它们来对它们的实体进行操作,我们所要做的就是调用它们的System::process方法

该系统链每秒运行60次

目前,它的实现使系统在单个thred上运行,按顺序处理其实体。我想要并发性

系统没有状态,因此我们可以安全地同时在多个线程上调用它们的进程方法,因为我们告诉每个方法调用它应该在系统实体的哪个部分上工作

示例:我们确定有2个可用的内核,因此我们在2个线程上运行每个系统。其中一个线程调用系统的process方法并告诉它处理包含实体的数组的0到20个索引,另一个线程调用同一个系统的process方法并告诉它处理20到40个索引

现在的问题是:考虑到可能的缓存大小和内核,负载应该分布在哪个线程上,哪个线程的最佳数量是多少,哪些线程没有考虑到。也许是通过试验来确定的


管理线程池等的最有效方法是什么?

我可能有点误解,但这听起来像是ForkJoinPool的工作。但是如果不需要在任务之间同步,一个简单的executor服务也就足够了。只要把所有的作业都放进去,调度器就可以完成剩下的工作。看看Clay Breshears的并发艺术。这是一本关于并行算法实现、将串行算法转换为并行算法以及何时/是否应该这样做的好书。