在Java中,如何为线程池配置最大CPU内核?

在Java中,如何为线程池配置最大CPU内核?,java,multithreading,scala,threadpool,executorservice,Java,Multithreading,Scala,Threadpool,Executorservice,例如,我在同一台计算机上有两个线程池。一个用于IO密集型任务,如remoteReading和remoteWriting,我们称之为ReadWritePool,另一个用于CPU密集型任务,我们称之为计算池。ReadWritePool的最大池大小为20。计算池的池大小为5 然后我有一个4核的CPU。我想为计算池分配3个核心,为ReadWritePool分配1个核心。我这样做是因为我不希望ReadWritePool中的线程与threads ComputiationalPool竞争,而允许在同一池中竞争

例如,我在同一台计算机上有两个线程池。一个用于IO密集型任务,如remoteReading和remoteWriting,我们称之为ReadWritePool,另一个用于CPU密集型任务,我们称之为计算池。ReadWritePool的最大池大小为20。计算池的池大小为5

然后我有一个4核的CPU。我想为计算池分配3个核心,为ReadWritePool分配1个核心。我这样做是因为我不希望ReadWritePool中的线程与threads ComputiationalPool竞争,而允许在同一池中竞争


像这样将不同类型的任务分成不同的池是一种好的做法吗?如果是这样,如何设置线程池可以使用的最大CPU内核?

大多数情况下,您应该让操作系统的调度程序决定如何将线程分配给内核,您唯一担心的是不要同时运行太多CPU密集型线程,因为这会给调度程序带来不必要的压力。将线程或线程池固定到核心是必要的或有用的,这是非常罕见的。我还不知道用Java做这件事的简单方法。例如,执行I/O工作的内核很可能在大部分时间都处于空闲状态,并可能同时执行一些CPU工作。正如@JoachimSauer所说,您应该尝试高效地使用资源,而不是为不同的线程分配不同的内核。话虽如此,Java中有一个线程固定库-