
有這樣一種編程模式, 它被稱作異步編程, 其作用在于處理包含并發(fā)以及并行的各類任務(wù) , 它能夠讓程序在執(zhí)行其中某一個(gè)任務(wù)之際, 并非要等待該任務(wù)達(dá)成, 而是能夠接著去執(zhí)行別的任務(wù) , 通過這樣的運(yùn)作方式, 會(huì)使得程序的效率以及響應(yīng)速度得以提升。于其中, 異步編程常常借助協(xié)程以及事件循環(huán)予以達(dá)成。協(xié)程乃是一種輕量級(jí)的線程, 能夠在各不相同的任務(wù)之間進(jìn)行切換來執(zhí)行, 然而并不需要去承受線程上下文切換所帶來的開銷。事件循環(huán)是一個(gè)處于不斷循環(huán)狀態(tài)的存在, 持續(xù)地從任務(wù)隊(duì)列當(dāng)中取出任務(wù)然后加以執(zhí)行, 一直到所有的任務(wù)都得以完成。有多個(gè)用于異步編程的庫以及框架被提供了, 當(dāng)中最為常用的是庫, 庫給出了一整套完整的異步編程工具, 涵蓋協(xié)程、事件循環(huán)、任務(wù)隊(duì)列等, 利用庫, 能夠經(jīng)由定義協(xié)程函數(shù)以及運(yùn)用關(guān)鍵字async/await去撰寫異步代碼。異步編程具備的優(yōu)勢在于能夠全面充分地運(yùn)用計(jì)算機(jī)展現(xiàn)出來的多核處理能力, 進(jìn)而提升程序所擁有的并發(fā)性能, 它適用于對輸入輸出密集類型任務(wù)加以處理, 像網(wǎng)絡(luò)請求、數(shù)據(jù)庫查詢等活動(dòng), 借助異步編程, 能夠防止出現(xiàn)阻塞主線程的情況, 以此提高程序所具備的響應(yīng)速度。概括來講, 異步編程屬于一種處理并發(fā)任務(wù)的編程模式, 借由協(xié)程與事件循環(huán)達(dá)成, 它能夠提升程序的效率以及響應(yīng)速度, 在處理IO密集型任務(wù)時(shí)適用。有這樣一種情況, 當(dāng)面臨處理好多大量IO密集型任務(wù)之際, 能擁有更好性能以及可伸縮性的是異步編程, 它具備這樣的特性, 在等待IO操作完成這個(gè)過程當(dāng)中, 程序能夠同時(shí)去執(zhí)行別的任務(wù), 并且不會(huì)讓主線程出現(xiàn)阻塞情況。其中, 異步編程的關(guān)鍵所在是用到了協(xié)程以及事件循環(huán)event loop。協(xié)程屬于一種輕量級(jí)的線程, 能夠于不一樣的任務(wù)之間開展切換執(zhí)行, 可不進(jìn)行線程上下文切換所產(chǎn)生的開銷。事件循環(huán)是個(gè)循環(huán), 會(huì)持續(xù)地從任務(wù)隊(duì)列當(dāng)中拿取任務(wù)并予以執(zhí)行, 直至所有任務(wù)都完成。因使用的庫, 故而可便利地編組異步代碼。借由定義協(xié)程函數(shù)以及運(yùn)用關(guān)鍵字async/await, 能夠?qū)惒街戮幣懦梢粋€(gè)協(xié)程對象。進(jìn)而, 把協(xié)程對象增添至事件循環(huán)里, 事件循環(huán)會(huì)承擔(dān)調(diào)度與執(zhí)行這些協(xié)程的職責(zé)。于異步編程里, 常見的操作乃是開展IO操作, 像網(wǎng)絡(luò)請求、文件讀寫、數(shù)據(jù)庫查詢等這般。這些IO操作一般是耗費(fèi)時(shí)間的, 然而在等候IO操作達(dá)成之際,可以切換至別個(gè)任務(wù)加以執(zhí)行, 借此提升程序的效率。當(dāng)IO操作完成之后, 事件循環(huán)會(huì)告知相應(yīng)的協(xié)程接著執(zhí)行。除了庫之外, 存在另外一部分異步編程的庫以及框架, 像是等等。這些庫能夠給予更具高級(jí)特性的功能以及更為豐富多樣的應(yīng)用程序編程接口, 從而滿足各類不同場景狀況下的異步編程需求。簡要概括來講, 異步程序這種編程方式借助協(xié)程以及事件循環(huán)得以達(dá)成, 能夠提升程序的性能以及可伸縮性。運(yùn)用庫能夠便利地撰寫異步代碼, 用以處理IO密集型任務(wù)。別的異步編程庫還有框架也給出了更高級(jí)的功能以及更為豐富的API, 適用于不一樣的異步編程需求。