.NET併發編程-基本概念

本系列學習在.NET中的併發並行編程模式,實戰技巧

順序

一次執行一個任務,按照步驟逐一完成任務,就是一次一條指令線性方式運行,下一個指令必須在上一個指令運行結束後開始。

像簡單的For循環,按集合順序執行。這是我們最常用也最不容易犯錯,但容易被阻塞,以同步下載文件爲例,就需要等文件下載完成落盤後進行下一步處理。

併發Concurrent

同時運行多個任務,將應用程序分成多個獨立的過程,這些過程在不同的線程中同時併發運行。併發和並行比較容易搞混,在單核機器上併發是同一時刻只能有一條指令執行,但多個指令被快速的切換執行,從宏觀上看就是同時執行的效果,微觀上在單核機上一個線程執行,其他線程就處於掛起狀態。

就像一個人啃三個饅頭,來回的啃,一口這個饅頭,一口那個饅頭。只要切換的夠快,你看三個饅頭就是同時慢慢變小的。

並行Parallel

同時執行多個任務。並行只有在多核機器上才能實現。前面說到併發在單核機器微觀上是串行執行的,但在多核中,就有可能是真正的同時執行。在多核中,一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶佔CPU資源,用時進行,這也就是並行。所以並行一定是併發的,併發就不一定是並行的,並行是併發的子集。

來三個人啃三個饅頭,一人一個,誰也別搶誰的喫。

多任務

同時在一段時間內執行多個任務。這裏的任務可以理解爲進程,在Windows系統中的任務管理器就是查看的各個應用程序進程信息。起初多任務就是設計用來在單核機上同時執行多任務的,所以以前的單核計算機也可以運行多個應用程序。

計算機在多個任務之間多是採用搶佔式切換

多線程

進程是資源分配的單元,線程是資源調度的單元,一個進程裏至少有一個線程,教科書如此定義。多線程使應用程序能夠在同一進程內細分爲不同的線程任務

to be contiued!
下集:爲什麼需要函數式編程實現併發?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章