2 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
簡單來說,不能這么理解
單線程任務(wù)我們一般稱之為串行任務(wù),當(dāng)前任務(wù)執(zhí)行完之前不能執(zhí)行第二個任務(wù);
與之對應(yīng)的就是并行任務(wù),或者簡單理解為并發(fā)任務(wù),解決了單線程任務(wù)執(zhí)行的瓶頸,提高了執(zhí)行速度;
異步呢,一般是針對單線程模型,由于任務(wù)鏈路過長造成的瓶頸,從而將任務(wù)拆分,縮短了任務(wù)時間,由兩個或多個線程完成,但是還是一個任務(wù),一般是利用一些中間件,如kafka
一個簡單的例子就是ajax
當(dāng)async=false
時,為單線程串行任務(wù),由于存在網(wǎng)絡(luò)io,當(dāng)前線程將被掛起,發(fā)生阻塞,阻塞期間瀏覽器?;
當(dāng)async=true
時,將任務(wù)拆分,http發(fā)送完畢之后線程立即返回并執(zhí)行下一個任務(wù),請求返回值后由另一個線程調(diào)用callback
,將結(jié)果回填http2
中還利用復(fù)雜一點的多路復(fù)用技術(shù),用以提升整體性能,具體參考http2
前一個通常我們稱之為同步阻塞,后一個稱之為異步非阻塞,區(qū)別就是充分利用了cpu
,沒有性能浪費

TA貢獻(xiàn)2051條經(jīng)驗 獲得超10個贊
并發(fā)和異步不是一個相關(guān)的概念吧,你想同時發(fā)起兩個異步請求,他們肯定是并發(fā)發(fā)起,如果把第二個放到第一個的回調(diào)里,這就是串行的了。如果用ESnext里的await就需要用promise.all來實現(xiàn)并發(fā)了,因為await是等第一個請求結(jié)束才會走下一個的。
純屬個人意見。
添加回答
舉報