【问题标题】:How multiple thread-pools compete for CPU resources?多个线程池如何争夺 CPU 资源?
【发布时间】:2022-01-16 17:26:42
【问题描述】:

我想知道 Java 中多个线程池是如何竞争 CPU 资源的?我有多个线程池用于不同的任务。如果我的 CPU 有 N 个内核,并且我为每个线程池分配了 N 个最大线程。

  • 如果所有线程池同时启动它们的任务,是否意味着它们会一起竞争 CPU 资源?
  • 它们如何相互竞争?每个线程是否持有一段时间的 CPU 资源?还是每个线程池都持有一段时间的 CPU 资源?

为不同的任务使用不同的线程池的好处是服务不会被饿死。同时,这是否意味着更多的线程池会导致更多的上下文切换并使程序变慢?

一般来说,多线程池比单线程池更好吗?

【问题讨论】:

    标签: java concurrency


    【解决方案1】:

    每个线程池包含一组工作线程,它们试图从任务队列中获取任务并执行它们,操作系统将schedule所有线程。没有each thread pool holding the CPU resource for a period of time这样的东西。

    如果一个线程池的任务队列是空的,那么这个线程池中的所有keep-alive(corePoolSize)工作线程都会被workQueue.take()方法阻塞,等待新的任务(线程进入WAITING状态) .

    不同的线程池适用于不同类型的任务。例如,Executors#newCachedThreadPool 适用于许多短期异步任务。您应该为不同类型的任务定制不同的线程池。

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多