我想知道多个线程池如何在Java中竞争CPU资源?我有多个线程池,用于不同的任务。如果我的CPU有N个核心,并且我为每个线程池分配了N个最大线程。
拥有不同任务的不同线程池的好处是服务不会被饿死。同时,这是否意味着更多的线程池会导致更多的上下文切换,并使程序变得更慢?
一般来说,拥有多个线程池比单个线程池的设计更好吗?
发布于 2021-12-13 08:48:24
每个线程池包含一组工作线程,这些线程试图从任务队列中获取任务并执行它们,操作系统将对所有线程进行schedule。没有像each thread pool holding the CPU resource for a period of time这样的东西。
如果线程池的任务队列为空,则此线程池中的所有保持活动(corePoolSize)工作线程将在workQueue.take()方法上被阻塞,并等待新任务(线程进入WAITING状态)。
不同的线程池适用于不同类型的任务。例如,Executors#newCachedThreadPool适用于许多短暂的异步任务.您应该为不同类型的任务自定义不同的线程池。
https://stackoverflow.com/questions/70331293
复制相似问题