併發與異步

併發:對多任務的並行執行的支持機制。網絡

多任務的消費機制。併發

多任務的處理機制;異步

 

異步:一種通訊機制;async

分流與合併機制。分佈式

 

異步與同步是一對概念,在方法調用的時候,若是咱們等待方法調用的返回則是同步,不等待而繼續執行程序流則是異步。從處理器的角度來看,有些操做消耗的時間,遠遠高於其運行指令的時間,好比從網絡獲取數據,寫入文件到磁盤等。若是採用同步方式,則大大的浪費了處理器的計算能力。在IO密集型的應用裏,異步調用成爲提升軟件性能的關鍵方法。函數

異步調用的關鍵點在於分流和回調執行起點。分流就是在當前代碼位置,將一部分代碼加入到條件達成後將來的回調執行流中,而另外一部分代碼則在當前程序流繼續執行。回調執行起點一般爲一個條件達成後來自操做系統的通知或者程序內部的消息(事件)。該事件會出發一個回調執行起點方法,去逆向執行回調流中的各個方法。性能

目前異步調用的實現最爲優雅的方式是async/await機制,它以習慣的同步的編碼風格來實現異步調用。在使用await的語句上,當前程序流從函數返回,而該語句之後的代碼做爲回調流在將來執行。編碼

在不支持async/await的平臺裏,爲了規避回調函數深度嵌套帶來的代碼風格異常醜陋。有兩種比較成熟的解決方案,一種是採用生成器(yield),另外一種是Promise/A+規範。操作系統

生成器在程序執行到yield時返回一個生成器對象,yield之後的代碼在執行該對象的next()方法後,繼續執行。若是將該對象的next()方法註冊爲回調執行起點方法,則可實現異步回調機制。線程

Promise/A+規範則採用then,fail等方法,將須要回調執行的方法註冊到回調執行序列裏面,Promise對象建立後繼續執行當前程序流。回調執行起點方法則爲resolve或reject。一樣須要注意的是,須要將執行起點方法或封裝後的方法註冊到消息系統中。

併發的的實現一般有進程併發,線程併發,協程併發(用戶態非搶佔式執行單元),在分佈式系統中存在網絡級併發。

併發帶來的主要問題是對共享資源的讀寫和執行條件依賴。對共享資源的讀寫問題的解決方案,目前常見的有兩種,一是鎖,二是消息隊列。執行條件依賴問題的解決方案主要也有兩種,一是經過主動檢查共享狀態變量,並提取須要的數據,令一種是被動接收通知,等待數據注入或主動去提取數據。

 

https://zhuanlan.zhihu.com/p/31851833

相關文章
相關標籤/搜索