如何在服务器端为我的线程池设置合适的线程号?

时间:2014-02-11 10:24:08

标签: java multithreading

我只想问一个菜鸟问题:如何在服务器端为我的线程池设置合适的线程号?

  1. 我可以遵循任何一般规则或公式吗?
  2. 我需要考虑哪些问题?例如,每秒网络请求数,CPU核心数,应用程序中的CPU和内存使用率,我在服务器上使用的硬件等等。

1 个答案:

答案 0 :(得分:1)

好吧,基本上池的大小应该设置为你的配置上同时执行的命令的最大可能性,比如你有4个核心(没有HyperThreading),然后你可以将它设置为4.使用超线程,你可以设置为8。

然而,有一些问题:应用程序的预期行为是什么,如果它想从池中获取一个线程,但是池是空的(就像池中有8个线程,如果它们是每个线程都是在接下来的10分钟内处理视频编码作业,并在您的经理线程中获得新请求。

但是,您应该考虑,不能保证所有线程都会在每个时刻运行,即使您的应用程序异常完美地处理线程,因为其他应用程序同时在您的计算机上运行(例如您的操作系统),以及他们也需要CPU。

另一方面,这也是一个很大的问题,一个线程在你的池中做了什么?您没有提供有关此线程池用于什么的信息,它们是否在您自己的应用中使用,或者您想要配置开源应用/商业应用等。创建和管理线程确实会产生严重的成本(调度,上下文切换)等等,这可能只值,如果你的线程保持足够长的时间(你可以为他们提供足够的工作)。

有关详细信息,对于以下关键字,我认为这个主题的一个非常好的起点可能是Google:“调度,并发,线程,java执行器服务,超线程”。