您好,登錄后才能下訂單哦!
小編給大家分享一下python中異步IO怎么同時(shí)處理請(qǐng)求,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1、云計(jì)算,典型應(yīng)用OpenStack。2、WEB前端開(kāi)發(fā),眾多大型網(wǎng)站均為Python開(kāi)發(fā)。3.人工智能應(yīng)用,基于大數(shù)據(jù)分析和深度學(xué)習(xí)而發(fā)展出來(lái)的人工智能本質(zhì)上已經(jīng)無(wú)法離開(kāi)python。4、系統(tǒng)運(yùn)維工程項(xiàng)目,自動(dòng)化運(yùn)維的標(biāo)配就是python+Django/flask。5、金融理財(cái)分析,量化交易,金融分析。6、大數(shù)據(jù)分析。
1、IO操作
CPU比磁盤(pán)、網(wǎng)絡(luò)等IO快很多。在一個(gè)線程中,CPU執(zhí)行代碼非???。但是一旦遇到IO操作,比如讀寫(xiě)文件,發(fā)送網(wǎng)絡(luò)數(shù)據(jù),就需要等待IO操作完成,才能進(jìn)行下一步操作。這種情況叫做同步IO。
IO操作過(guò)程中,當(dāng)前線程掛起,其他需要CPU執(zhí)行的代碼無(wú)法被當(dāng)前線程執(zhí)行。
因?yàn)橐粋€(gè)IO操作阻塞了當(dāng)前線程,導(dǎo)致其他代碼無(wú)法執(zhí)行,我們必須使用多線程或者多個(gè)進(jìn)程并發(fā)執(zhí)行代碼,為多個(gè)用戶(hù)服務(wù)。每個(gè)用戶(hù)將被分配一個(gè)線程。如果線程因IO而掛起,其他用戶(hù)的線程不會(huì)受到影響。
雖然多線程多進(jìn)程模型解決了并發(fā)問(wèn)題,但是系統(tǒng)不能無(wú)限制的增加線程。由于系統(tǒng)中線程切換的開(kāi)銷(xiāo)較高,一旦線程過(guò)多,CPU時(shí)間就會(huì)花在線程切換上,實(shí)際運(yùn)行代碼的時(shí)間會(huì)更少,導(dǎo)致性能?chē)?yán)重下降。
因?yàn)槲覀円鉀Q的問(wèn)題是CPU的高速執(zhí)行能力與IO設(shè)備的龜速?lài)?yán)重不匹配,多線程和多進(jìn)程只是解決這個(gè)問(wèn)題的一種方式。
2、異步IO處理
另一種解決IO問(wèn)題的方法是異步IO。當(dāng)代碼需要執(zhí)行耗時(shí)的IO操作時(shí),只發(fā)出IO指令,不等待IO結(jié)果,然后執(zhí)行其他代碼。一段時(shí)間后,IO返回結(jié)果時(shí),會(huì)通知CPU進(jìn)行處理。
可以想象,如果按普通順序編寫(xiě)的代碼實(shí)際上無(wú)法完成異步IO,那么異步IO模型需要一個(gè)消息循環(huán),其中主線程重復(fù)“讀取消息——處理消息”的過(guò)程。
從“發(fā)出IO請(qǐng)求”到接收“IO完成”期間,主線程只能在同步IO模式下掛起,但在異步IO模式下,主線程并不休息,而是繼續(xù)在消息循環(huán)中處理其他消息。這樣在異步IO模式下,一個(gè)線程可以同時(shí)處理多個(gè)IO請(qǐng)求,不存在切換線程的操作。對(duì)于大多數(shù)IO密集型應(yīng)用,使用異步IO會(huì)大大提高系統(tǒng)的多任務(wù)處理能力。
以上是“python中異步IO怎么同時(shí)處理請(qǐng)求”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。