並發:對多任務的並行執行的支持機制。
多任務的消費機制。
多任務的處理機制;
異步:一種通信機制;
分流與合並機制。
異步與同步是一對概念,在方法調用的時候,如果我們等待方法調用的返回則是同步,不等待而繼續執行程序流則是異步。從處理器的角度來看,有些操作消耗的時間,遠遠高於其運行指令的時間,比如從網絡獲取數據,寫入文件到磁盤等。如果采用同步方式,則大大的浪費了處理器的計算能力。在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