日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

服务器select与gevent

發(fā)布時(shí)間:2024/7/5 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务器select与gevent 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

select版-TCP服務(wù)器

?

1. select 原理

在多路復(fù)用的模型中,比較常用的有select模型和epoll模型。這兩個(gè)都是系統(tǒng)接口,由操作系統(tǒng)提供。當(dāng)然,Python的select模塊進(jìn)行了更高級(jí)的封裝。

將需要判斷有數(shù)據(jù)傳來(lái)的(可讀的)socket、可以向外發(fā)送數(shù)據(jù)的(可寫的)socket及發(fā)生異常狀態(tài)的socket交給select,select會(huì)幫助我們從中遍歷找出有事件發(fā)生的socket,并返回給我們,我們可以直接處理這些發(fā)生事件的socket。

?

2. 總結(jié)

優(yōu)點(diǎn)

select目前幾乎在所有的平臺(tái)上支持,其良好跨平臺(tái)支持也是它的一個(gè)優(yōu)點(diǎn)。

?

缺點(diǎn)

select的一個(gè)缺點(diǎn)在于單個(gè)進(jìn)程能夠監(jiān)視的文件描述符的數(shù)量存在最大限制,在Linux上一般為1024,可以通過(guò)修改宏定義甚至重新編譯內(nèi)核的方式提升這一限制,但是這樣也會(huì)造成效率的降低。

一般來(lái)說(shuō)這個(gè)數(shù)目和系統(tǒng)內(nèi)存關(guān)系很大,具體數(shù)目可以cat /proc/sys/fs/file-max察看。32位機(jī)默認(rèn)是1024個(gè)。64位機(jī)默認(rèn)是2048.

對(duì)socket進(jìn)行掃描時(shí)是依次掃描的,即采用輪詢的方法,效率較低。

當(dāng)套接字比較多的時(shí)候,每次select()都要通過(guò)遍歷FD_SETSIZE個(gè)Socket來(lái)完成調(diào)度,不管哪個(gè)Socket是活躍的,都遍歷一遍。這會(huì)浪費(fèi)很多CPU時(shí)間。

?

?

gevent

greenlet已經(jīng)實(shí)現(xiàn)了協(xié)程,但是這個(gè)還的人工切換,是不是覺(jué)得太麻煩了,不要捉急,python還有一個(gè)比greenlet更強(qiáng)大的并且能夠自動(dòng)切換任務(wù)的模塊gevent

?

其原理是當(dāng)一個(gè)greenlet遇到IO(指的是input output輸入輸出,比如網(wǎng)絡(luò)、文件操作等)操作時(shí),比如訪問(wèn)網(wǎng)絡(luò),就自動(dòng)切換到其他的greenlet,等到IO操作完成,再在適當(dāng)?shù)臅r(shí)候切換回來(lái)繼續(xù)執(zhí)行。

由于IO操作非常耗時(shí),經(jīng)常使程序處于等待狀態(tài),有了gevent為我們自動(dòng)切換協(xié)程,就保證總有g(shù)reenlet在運(yùn)行,而不是等待IO

?

?本身睡覺(jué)時(shí)間:gecent.sleep()

總結(jié)

以上是生活随笔為你收集整理的服务器select与gevent的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。