2011-04-29 45 views
2

我在Java中有一個Process,tat需要4分鐘才能完成。 10個這樣的過程排隊大約需要40分鐘。如果我將一個進程的線程作爲一個線程進行線程處理,那麼所有10個進程都將並行運行,大約需要20分鐘才能完成。是不是假設需要4分鐘才能完成,因爲所有的過程都是並行運行的?JAVA中的多處理器

回答

6

如果所有這些線程都在單個處理器上運行,則操作系統必須進行時間片切換和上下文切換。這種開銷會增加時間。

除非您有多個處理器來分割工作,否則沒有並行性。線程無法減少單個處理器上的工作。

+0

剛開始輸入相同。 – Anatolij 2011-04-29 11:48:15

+0

除了大部分時間被阻塞的I/O繁重任務外。 – 2011-04-29 11:49:43

+0

如果程序交替限制CPU和IO,線程可以幫助單個核心繫統。 – 2011-04-29 11:50:49

1

同時運行的實際線程數通常取決於您的CPU具有的內核數。我想你有一個雙核CPU,因此是時代。

1

如果CPU上有10個內核,則10個進程只能運行並行。但他們確實同時運行。

0

只有當你有10個處理器,10個IO系統等

多個線程需要共享資源

2

是不是它想採取4分鐘到 完整的,因爲所有的過程都是 並行運行?????

只有當您實際上有10個內核並且程序完全受CPU限制時。您的機器只有2個內核,或者程序部分是IO或內存限制的。所有這些都很常見。

+0

我的過程共享一個共同的對象.. Tat會影響性能多遠 – SriHarish 2011-04-29 12:28:58

+0

@SriHarish:那隻會是如果在該對象上存在嚴重爭用的同步,則是相關的 – 2011-04-29 12:57:42

0

這取決於你的流程在做什麼。如果例如一個進程執行大量IO操作,而其他進程執行大量計算操作,但他們確實只會一起執行這4個操作。

如果兩個進程都採用相同的資源,則需要更長的時間,因爲必須等待資源可用。

多久螺紋加工需要不能是說,如果你不告訴我們過程做什麼,它在運行,還有什麼正在運行,等等,等等等等

0

這就像divididing了將工作合同分爲5份合同 - 電器,木工,油漆,景觀和地板。如果你僱用5個人,它將花費你1/5的時間,但如果你只有一個,它需要花費相同的時間。

0

另一個想法是,多線程只會改善解決問題的時間,如果問題是可並行化的並且沒有共享資源可能會阻礙進程。我發現如果某些應該可並行化的東西在並行化時表現出差的性能,那是因爲訪問共享資源。

0

如果只有生命如此簡單。首先,假設你只有一個沒有超線程技術的CPU,所以在你的機器上,任何時候只有一個線程在運行。現在考慮可能的任務配置文件中的兩個極端:

  1. CPU綁定 - 您的任務確實需要四分鐘才能完成。

  2. IO-bound(或者網絡,如果你喜歡的話) - 每個任務都轉到同步Web服務,需要4分鐘才能提供結果。

在情況1中,添加線程無濟於事。你的單核仍然需要相同的時間才能完成所有的數學任務。你絕對必須擁有更多的CPU才能使其更快。

在情況2中,假設網站響應時間不會在負載下降低,您可能更合理地預計總時間爲4分鐘。每個線程啓動它的請求,然後它處於等待狀態,直到Web響應到達,允許其他線程啓動它們自己的請求。

實際上,您的任務可能會有一些I/O和CPU延遲混合在一起,產生您實際看到的「中間1到2」總執行時間。

您也一定不要忘記管理機器上其他進程的開銷(即使系統進程必須被管理)和進程的操作系統管理 - 對於您包含在每個新線程中的每個新線程處理。