2009-07-02 50 views
8

我們可以在單個CPU上互換使用「並行編碼」和「多線程編碼」嗎?並行編碼與多線程(在單個CPU上)

我在這兩方面都沒有多少經驗, 但我想將我的編碼風格轉移到上述任何一種。

正如我現在發現的那樣,許多單一的應用程序已經過時了,這對未來的軟件行業來說會更好,因爲它可以成爲職業前景?

回答

0

我不確定你認爲「並行編碼」是什麼,而是並行編碼,據我所知,它是指產生由CPU並行執行的代碼,因此多線程代碼屬於該描述。

這樣,顯然你可以交替使用它們(因爲它們落入另一個內部)。

儘管如此,我建議你慢慢來,並從基礎知識開始學習。瞭解爲什麼多線程變得越來越重要,進程,線程和光纖之間有什麼區別,你如何同步它們等等。

請記住,您稱之爲並行編碼是相當複雜的,特別是與序列編碼相比,所以要做好準備。也不要匆忙進入。僅僅因爲你使用3個線程而不是1個線程不會使你的程序更快,甚至可能會讓它變慢。你需要了解這些問題和原因。並非所有的事情都可以平行進行,而不是可以做到的。

2

這個問題有點令人困惑,因爲您可以在多個線程中執行並行操作,但所有多線程應用程序都不使用並行計算。 在並行代碼中,通常會有許多「工作人員」使用一組數據異步返回結果。但多線程在更廣泛的範圍內使用,如GUI,阻止I/O和網絡。

由於管理取決於您的操作系統如何處理線程和進程,因此處於單個或多個CPU上並沒有多大改變。多線程在各處都會很有用,並行並不是日常的計算範例,因此它可能是職業前景中的「利基」。

2

我在.NET 4.0中看到的一些演示,並行代碼更改似乎更容易,然後執行線程。 「For Loops」和其他一些支持並行處理的新語法。所以有區別。

我認爲在未來,你會同時做到這兩點,但我認爲並行支持會更好,更容易。你仍然需要線程進行後臺操作和其他事情。

+0

HTTP寫的編譯器或我的結構要麼完成了://channel9.msdn。 com/posts/VisualStudio/Using-the-Parallel-Extensions-to-the-NET-Framework/ – eschneider 2009-07-02 08:22:40

1

事實是,您無法在單個CPU上實現「真正」的並行。有幾個庫(如C的MPI)在這方面有所幫助。但並列主義的概念並不是用於在流行的解決方案上工作的開發人員。

由於在單個CPU上引入了多個內核,因此多線程很常見,由於線程庫和線程安全類型,方法,類等等,因此在每種語言中實現都很容易且幾乎透明。這樣你可以模擬並列。

無論如何,如果您從此開始,請先閱讀有關併發和線程的主題。當然,線程+並行性可以在一起工作。

+0

除了可能在erlang中,多線程在任何語言中都不容易。 – 2009-07-02 08:41:41

12

多線程與並行編碼/計算之間肯定存在重疊,目標處理架構的主要區別在於。

多線程已被用於一個進程中利用具有共享存儲器在單個CPU上併發的好處。在具有多個CPU的機器上運行相同的程序可能會導致顯着的加速,但通常是獎金而非預期(直到最近)。許多操作系統都有線程模型(例如pthreads),它們受益於但不需要多個CPU。

多重並行編程靶向多個CPU的標準模型中,從一個大的機器上許多CPU早期SMP機,然後到集羣計算跨越許多機器,現在回到上的許多CPU /核單電腦。 MPI是一個可以跨多種不同架構工作的標準。

當然,我們可以使用帶有語言框架的線程編程一個並行設計,如OpenMP。我聽說過依賴於單獨處理的多組件GUI /應用程序,理論上它可以在任何地方運行。實際上,前者比後者多。

可能最主要的區別是程序跨多臺機器運行,使用多線程並不實際,而共享內存的現有應用程序將無法工作。

0

簡單的語言 多線程可以在CPU本身和 並行編程是一個明確的任務由程序員「的#pragma」