【问题标题】:How to decide the number of thread in a thread pool [duplicate]如何确定线程池中的线程数[重复]
【发布时间】:2017-10-31 10:57:25
【问题描述】:

在 java web 项目中,用户将他们的任务发送到 web。为了处理这些任务,我使用一个包含 10 个线程的线程池来处理它们的任务。每个任务都将构建到一个线程并发送到线程池。线程池被设计成一个静态变量,这意味着所有的任务(线程)共享同一个线程池。
今天,有 200 位用户访问我的网站,然后他们抱怨他们的任务运行速度非常慢......

  • 是静态线程池中的线程太少了吗?也许这个数字应该是30? 50 ?
  • 也许我不应该使用静态线程池?
  • 也许我不应该使用线程池,因为有很多任务,我可以taskThread.start() 吗?

【问题讨论】:

    标签: java multithreading web


    【解决方案1】:

    通常,您会弄清楚 IO 对您的处理的约束程度以及您可用的内核数量。完美的公式是:

    number_of_cores*(1/cpu_sticky)
    

    其中 cpu_sticky 介于 0 和 1 之间。所以如果你认为它是高 IO, cpu_sticky 非常低(例如 0.1),而高度 CPU 密集型的 CPU_sticky 较高(例如 .9)。

    最有可能的是代码需要长时间的数据库搜索或搜索,这会锁定数据库中的一行或多行,因此需要一个或多个线程等待完成。在那种情况下,有很多线程,但每个线程仍然很慢。

    【讨论】:

    • 作为在 java 中查找 number_of_cores 的旁注,可以这样使用它; int number_of_cores = Runtime.getRuntime().availableProcessors();
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2018-10-02
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多