亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

已同步是什么意思啊 同步是什么( 二 )


一個(gè)異步應(yīng)用程序完全運(yùn)行在單個(gè)進(jìn)程或線程中,這可以說是令人吃驚的 。當(dāng)然,這種類型的并發(fā)需要遵循一些規(guī)則,因此你不能讓一個(gè)任務(wù)占用 CPU 太長(zhǎng)時(shí)間,否則,剩余的任務(wù)會(huì)被阻塞 。為了異步執(zhí)行,所有的任務(wù)需要定時(shí)主動(dòng)暫停并將控制權(quán)返還給循環(huán) 。為了從異步方式獲益,一個(gè)應(yīng)用程序需要有經(jīng)常被 I/O 阻塞的任務(wù),并且沒有太多 CPU 工作 。Web 應(yīng)用程序通常非常適合,特別是當(dāng)它們需要處理大量客戶端請(qǐng)求時(shí) 。
在使用一個(gè)異步服務(wù)器時(shí),為了最大化多 CPU 的利用率,通常需要?jiǎng)?chuàng)建一個(gè)混合方案,增加一個(gè)負(fù)載均衡器并在每個(gè) CPU 上運(yùn)行一個(gè)異步服務(wù)器,如下圖所示:

已同步是什么意思啊 同步是什么

文章插圖
Python 中實(shí)現(xiàn)異步的 2 種方法我敢肯定,你知道要在 Python 中寫一個(gè)異步應(yīng)用程序,你可以使用 asyncio package ,這個(gè)包是在協(xié)程的基礎(chǔ)上實(shí)現(xiàn)了所有異步應(yīng)用程序都需要的暫停和恢復(fù)特性 。其中yield關(guān)鍵字,以及更新的async和await都是asyncio構(gòu)建異步能力的基礎(chǔ) 。
Python 生態(tài)系統(tǒng)中還有其它基于協(xié)程的異步方案,例如 Trio 和 Curio。還有 Twisted ,它是所有協(xié)程框架中最古老的,甚至出現(xiàn)得比asyncio都要早 。
如果你對(duì)編寫異步 Web 應(yīng)用程序感興趣,有許多基于協(xié)程的異步框架可以選擇,包括 aiohttp 、 sanic 、 FastAPI 和 Tornado。
很多人不知道的是,協(xié)程只是 Python 中編寫異步代碼的兩種方法之一 。第二種方法是基于一個(gè)叫做 greenlet 的庫(kù),你可以用 pip 安裝它 。Greenlets 和協(xié)程類似,它們也允許一個(gè) Python 函數(shù)暫停執(zhí)行并稍后恢復(fù),但是它們實(shí)現(xiàn)這點(diǎn)的方式完全不同,這意味著 Python 中的異步生態(tài)系統(tǒng)分成兩大類 。
協(xié)程與 greenlets 之間針對(duì)異步開發(fā)最有意思的區(qū)別是,前者需要 Python 語言特定的關(guān)鍵字和特性才能工作,而后者并不需要 。我的意思是,基于協(xié)程的應(yīng)用程序需要使用一種特定的語法來書寫,而基于 greenlet 的應(yīng)用程序看起來幾乎和普通 Python 代碼一樣 。這非???,因?yàn)樵谀承┣闆r下,這讓同步代碼可以被異步執(zhí)行,這是諸如asyncio之類的基于協(xié)程的方案做不到的 。
那么在 greenlet 方面,跟asyncio對(duì)等的庫(kù)有哪些?我知道 3 個(gè)基于 greenlet 的異步包: Gevent 、 Eventlet 和 Meinheld ,盡管最后一個(gè)更像是一個(gè) Web 服務(wù)器而不是一個(gè)通用的異步庫(kù) 。它們都有自己的異步循環(huán)實(shí)現(xiàn),而且它們都提供了一個(gè)有趣的“monkey-patching”功能,取代了 Python 標(biāo)準(zhǔn)庫(kù)中的阻塞函數(shù),例如那些執(zhí)行網(wǎng)絡(luò)和線程的函數(shù),并基于 greenlets 實(shí)現(xiàn)了等效的非阻塞版本 。如果你有一些同步代碼想要異步運(yùn)行,這些包會(huì)對(duì)你有所幫助 。
據(jù)我所知,唯一明確支持 greenlet 的 Web 框架只有 Flask。這個(gè)框架會(huì)自動(dòng)監(jiān)測(cè),當(dāng)你想要運(yùn)行在一個(gè) greenlet Web 服務(wù)器上時(shí),它會(huì)自我進(jìn)行相應(yīng)調(diào)整,而無需進(jìn)行任何配置 。這么做時(shí),你需要注意不要調(diào)用阻塞函數(shù),或者,如果你要調(diào)用阻塞函數(shù),最好用猴子補(bǔ)丁來“修復(fù)”那些阻塞函數(shù) 。
但是,F(xiàn)lask 并不是唯一受益于 greenlets 的框架 。其它 Web 框架,例如 Django 和 Bottle ,雖然沒有 greenlets,但也可以通過結(jié)合一個(gè) greenlet Web 服務(wù)器并使用 monkey-patching 修復(fù)阻塞函數(shù)的方式來異步運(yùn)行 。
異步比同步更快嗎?對(duì)于同步和異步應(yīng)用程序的性能,存在著一個(gè)廣泛的誤解——異步應(yīng)用程序比同步應(yīng)用程序快得多 。
對(duì)此,我需要澄清一下 。無論是用同步方式寫,還是用異步方式寫,Python 代碼運(yùn)行速度是幾乎相同的 。除了代碼,有兩個(gè)因素能夠影響一個(gè)并發(fā)應(yīng)用程序的性能:上下文切換和可擴(kuò)展性 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: