2013-01-10 65 views
5

我注意到,默认的Tomcat 7的线程池的大小似乎是200为什么tomcat的默认线程池大小如此之大?

但正常的CPU似乎有16个内核。

因此,只有16个线程可以执行paralleld

为什么tomcat的使用这么多线程。

+0

您的计算机当前可能运行几十个进程/线程。我怀疑它有超过4个“真正”的执行流,但所有的东西都可以“同时运行”。这是由于[调度](http://en.wikipedia.org/wiki/Scheduling_(计算))在现代操作系统中发现的原因。 – 2013-01-10 02:23:14

+3

我不知道内部,但这些线程可能只是无所事事地坐下(脚印除外),并且它们的子集(理想上等于核心计数)正在执行。所以200可能意味着他们期望有大量的阻塞线程。 – GManNickG

+0

传统的策略是分配许多线程,这些线程大多数工作都与cpu工作混合在一起。如果你看这个图表http://norvig.com/21-days.html#answers然后从美国发送一个数据包到欧洲需要大量的cpu周期。大多数时间都花在等待内存/磁盘/网络的io上,因此数百个线程可以共享这些内核。较新的服务器/框架为不同的工作使用不同的线程池,例如非阻塞的Play框架http://www.playframework.com/documentation/2.1.0/ThreadPools某些线程池使用一个内核作为非内核,也不阻塞 – simbo1905

回答

4

对于漫长的岁月里许多单核电脑已经出现,并能在一个“伪并行”模式下运行的功能,这么说,你可能有16个线程实时并行模式运行和其他伪并行运行。

欲了解更多信息,看看这个:Parallel Computing

要回答你的问题,这些线程处理请求有用的,一群人将被用于参加HTTP请求和其他人将被上调用应用程序逻辑使用。

+0

你的意思是说,http请求只需要很少的CPU使用,所以tomcat可以使用更多的线程使CPU更加“繁忙”? – jilen

+0

处理速度比网络传输速度快,特别是在互联网上,所以有很多IO时间来使用cpu,否则会被浪费。 –

0

大多数现实生活中的web应用程序都使用数据库来存储应用程序数据,因此往往是磁盘密集型的。太多的线程同时访问磁盘会导致磁盘抖动。因此,限制线程数对于具有数据库的Web应用程序来说确实有意义。

0

在200个线程中,只有16个线程在16核机器上运行。典型的Web应用程序的逻辑是执行一些简单的计算和繁重的数据库查询。在200个线程中,只有少数正在进行计算,其中大部分都在等待数据库的响应。