2009-08-25 42 views

回答

2

對於所有實際目的而言,這是情境性的,它確實「依賴」。

  • 什麼線程都在做什麼?
  • 他們每個人需要多少內存?
  • 有多少垃圾回收正在進行?
  • 你有多少記憶?
  • 你有多少個CPU?
  • 它們有多快?

的Java EE應用服務器的應用程序往往不是創建線程自己。而是配置線程池。我從來沒有遇到過創建10個以上的線程能夠解決問題的能力,以及一些應用程序服務器的限制阻止我這樣做。

使不同的應用服務器之間的性能比較,是非常不平凡的答案和傾向於脆 - 即。工作類型的微小變化會產生不同的答案。

你爲什麼問這個問題?

+0

我問的原因是我想在Web服務中做一些異步處理。當然,原始請求將由應用程序服務器定義的線程池中的線程提供服務,但該線程會產生5個額外的線程來完成這項工作。因此,服務器可能需要的線程總數=請求服務線程數量*每個請求的工作線程數量+一定數量的後臺線程。這個數字可能相當大。我只是想知道在我實現某些功能之前JVM如何在這種情況下行爲。 – 2009-08-25 16:03:03

+0

1)線程正在處理的web服務請求和內部訪問數據庫和其他網絡服務 2 + 3)與今天順序處理他們花費5-6MB /請求 4)可用的內存:2GB 5)1級的CPU 6)取決於在後端系統響應上 – 2009-08-25 16:08:15

+0

許多應用程序服務器構建了以受控方式允許某種方式產生額外工作線程的方式,異步作業隊列等。使用這些方法,您應該能夠在普通服務線程和其他工作線程之間取得平衡。很可能,如果Web服務工作非常繁重,「submitJob,getJobResult」操作對可能會運行良好。 – djna 2009-08-25 17:38:32

0

這真的不是你可以純粹從Java VM找到的東西。它比硬件/操作系統的限制更多於特定於虛擬機的任何限制。找出答案的最好方法是用大量的線程進行測試,並查看開始看到性能下降的位置。另見this devx discussion

+0

謝謝。該鏈接很有幫助。 – 2009-08-25 15:56:17

1

這是真的取決於你與(數量的CPU,內存量等),也依賴於OS(的Solaris與Windows的),因爲底層的線程上運行的特定硬件取決於OS-提供線程管理。它還取決於應用程序和應用程序服務器本身,因爲每個線程消耗的資源量取決於應用程序。