我注意到,默認的Tomcat 7的線程池的大小似乎是200爲什麼tomcat的默認線程池大小如此之大?
但正常的CPU似乎有16個內核。
因此,只有16個線程可以執行paralleld
爲什麼tomcat的使用這麼多線程。
我注意到,默認的Tomcat 7的線程池的大小似乎是200爲什麼tomcat的默認線程池大小如此之大?
但正常的CPU似乎有16個內核。
因此,只有16個線程可以執行paralleld
爲什麼tomcat的使用這麼多線程。
對於漫長的歲月裏許多單核電腦已經出現,並能在一個「僞並行」模式下運行的功能,這麼說,你可能有16個線程實時並行模式運行和其他僞並行運行。
欲瞭解更多信息,看看這個:Parallel Computing
要回答你的問題,這些線程處理請求有用的,一羣人將被用於參加HTTP請求和其他人將被上調用應用程序邏輯使用。
你的意思是說,http請求只需要很少的CPU使用,所以tomcat可以使用更多的線程使CPU更加「繁忙」? – jilen
處理速度比網絡傳輸速度快,特別是在互聯網上,所以有很多IO時間來使用cpu,否則會被浪費。 –
大多數現實生活中的web應用程序都使用數據庫來存儲應用程序數據,因此往往是磁盤密集型的。太多的線程同時訪問磁盤會導致磁盤抖動。因此,限制線程數對於具有數據庫的Web應用程序來說確實有意義。
在200個線程中,只有16個線程在16核機器上運行。典型的Web應用程序的邏輯是執行一些簡單的計算和繁重的數據庫查詢。在200個線程中,只有少數正在進行計算,其中大部分都在等待數據庫的響應。
您的計算機當前可能運行幾十個進程/線程。我懷疑它有超過4個「真正」的執行流,但所有的東西都可以「同時運行」。這是由於[調度](http://en.wikipedia.org/wiki/Scheduling_(計算))在現代操作系統中發現的原因。 – 2013-01-10 02:23:14
我不知道內部,但這些線程可能只是無所事事地坐下(腳印除外),並且它們的子集(理想上等於核心計數)正在執行。所以200可能意味着他們期望有大量的阻塞線程。 – GManNickG
傳統的策略是分配許多線程,這些線程大多數工作都與cpu工作混合在一起。如果你看這個圖表http://norvig.com/21-days.html#answers然後從美國發送一個數據包到歐洲需要大量的cpu週期。大多數時間都花在等待內存/磁盤/網絡的io上,因此數百個線程可以共享這些內核。較新的服務器/框架爲不同的工作使用不同的線程池,例如非阻塞的Play框架http://www.playframework.com/documentation/2.1.0/ThreadPools某些線程池使用一個內核作爲非內核,也不阻塞 – simbo1905