異步和多線程的關係

異步:爲了壓榨CPU的處理能力,避免阻塞,CPU不去等待比較耗時的IO或者其餘耗時的非計算密集型的操做,使得CPU能夠自顧自個的去處理事情。IO操做完成以後會回調或者CPU主動獲取結果,而後處理接下來的操做。舉個例子,CPU發出燒水指令,讓電熱壺(其餘硬件)去燒水,CPU而後去幹其餘事,並無等待水燒開以後再去幹其餘事情,當電熱壺把水燒開以後通知CPU或者CPU會監控電熱壺水是否燒開,而後CPU把燒開的水倒入杯子算法

 

多線程:多線程也是爲了壓榨CPU的處理能力,多線程沒有回調,一件事情多個線程併發的去處理,充分利用CPU多核的資源,舉個例子,CPU要修一段100米的路,CPU有4個工程隊,CPU發送指令,第一工程隊去修0-25米,第二隊去修25-50米,第三隊去修50-75米,第四對去修75-100米,四個隊公用一臺壓路機,壓路機就是獨佔性資源,因此每一個隊在用的時候其餘隊不能使用,可是能夠去幹其餘事,四個隊是併發的去修路數據庫

 

異步優缺點:異步操做無需額外的線程負擔,主要使用回調的方式進行處理,若是設計的充分好的狀況下,處理函數沒必要要使用共享變量,避免的死鎖的可能。可是異步操做編寫比較複雜,尤爲是回調機制,與正常理解不一致,不容易理解,難於調試網絡

 

多線程優缺點:多線程按順序執行,符合正常人的理解,變成簡單。可是多線程直接的線程切換比較消耗CPU的資源,而且若是存在爭用的資源,可能產生死鎖多線程

 

使用環境:異步比較適合IO操做,如數據庫讀取、讀寫文件、網絡讀寫、RPC等。多線程比較適合大規模的計算,好比圖形圖像處理、複雜算法併發

 

多線程和異步的關係:從辯證的角度上看,異步是目的,多線程是其中的一個手段,多線程能夠實現異步,異步是當一個調用者的請求發送給被調動者後不須要等待被調用者返回的結果,這個調用者能夠是一個線程處理操做也能夠是進程處理操做異步

異步有時候須要一個普通線程,有時候須要系統的異步調用功能,可是有限異步的IO操做未必須要一個線程來運行函數

相關文章
相關標籤/搜索