這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
People can only lose when they give up fighting, so long as they insist on fighting, they will not lose.
人,只有在放棄戰鬥的時候才算輸,只要堅持戰鬥,就還沒輸。
Golang是並發語言而不是並行語言。
那麼並行和並發有什麼千絲萬縷的關係的呢?
什麼是並發,並行?
並發就是一次性做大量的事情的能力。
1. 解釋一:並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔發生。
例如: 每天早上10分鐘我洗臉,刷牙,吃早飯等等很多事情,這就是並發。 我一邊刷牙的同時在燒水做飯這就是並行。
並發的關鍵是你有處理多個任務的能力,不一定要同時。並行的關鍵是你有同時處理多個任務的能力。
2. 解釋二:並行是在不同實體上的多個事件,並發是在同一實體上的多個事件。
3.解釋三:在一台處理器上“同時”處理多個任務,在多台處理器上同時處理多個任務。如hadoop分布式叢集
所以並發編程的目標是充分的利用處理器的每一個核,以達到最高的處理效能。
用技術的層面來說明:
假如一個web網頁中有視頻播放和檔案下載兩個動作,當瀏覽器在單核的處理器下運行時, CPU核心會在這兩個事件中來回切換,(同時)播放視頻和下載,這就稱為並發。並發進程在不同的時間點開始並有著重疊的執行循環。
在肉眼上感知到的是同時的。
假如你的CPU是多核處理器,那麼下載和播放會在不同的CPU核心同時執行,這就是並行。
並行並不一定使執行時間更快。這是因為並行啟動並執行組件可能必須相互連信。例如,在我們的瀏覽器中,當檔案下載完成時,應該將它傳遞給使用者,比如使用快顯視窗。這種通訊發生在負責下載的組件和負責呈現使用者介面的組件之間。這種通訊開銷在並發系統中很低。當組件在多個核心中並行運行時,這種通訊開銷很高。因此並行程式並不一定使執行時間更快!
Go支援並發
在Golang中使用goroutine和channel來處理並發執行。
並發屬於並行。
更多關於並發、並行的介紹可Google百度深入瞭解。