如何确定线程池中的线程数

时间:2017-10-31 10:57:26

标签: java multithreading web

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

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

1 个答案:

答案 0 :(得分:0)

通常,您会弄清楚您的处理的IO绑定方式以及您可用的核心数量。完美的公式将是:

number_of_cores*(1/cpu_sticky)

其中cpu_sticky介于0和1之间。因此,如果您认为它是高度IO, cpu_sticky非常低(比如说.1),而高CPU密集型的cpu_sticky很高(比如说.9)。

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