服务器select与gevent
select版-TCP服務器
?
1. select 原理
在多路復用的模型中,比較常用的有select模型和epoll模型。這兩個都是系統接口,由操作系統提供。當然,Python的select模塊進行了更高級的封裝。
將需要判斷有數據傳來的(可讀的)socket、可以向外發送數據的(可寫的)socket及發生異常狀態的socket交給select,select會幫助我們從中遍歷找出有事件發生的socket,并返回給我們,我們可以直接處理這些發生事件的socket。
?
2. 總結
優點
select目前幾乎在所有的平臺上支持,其良好跨平臺支持也是它的一個優點。
?
缺點
select的一個缺點在于單個進程能夠監視的文件描述符的數量存在最大限制,在Linux上一般為1024,可以通過修改宏定義甚至重新編譯內核的方式提升這一限制,但是這樣也會造成效率的降低。
一般來說這個數目和系統內存關系很大,具體數目可以cat /proc/sys/fs/file-max察看。32位機默認是1024個。64位機默認是2048.
對socket進行掃描時是依次掃描的,即采用輪詢的方法,效率較低。
當套接字比較多的時候,每次select()都要通過遍歷FD_SETSIZE個Socket來完成調度,不管哪個Socket是活躍的,都遍歷一遍。這會浪費很多CPU時間。
?
?
gevent
greenlet已經實現了協程,但是這個還的人工切換,是不是覺得太麻煩了,不要捉急,python還有一個比greenlet更強大的并且能夠自動切換任務的模塊gevent
?
其原理是當一個greenlet遇到IO(指的是input output輸入輸出,比如網絡、文件操作等)操作時,比如訪問網絡,就自動切換到其他的greenlet,等到IO操作完成,再在適當的時候切換回來繼續執行。
由于IO操作非常耗時,經常使程序處于等待狀態,有了gevent為我們自動切換協程,就保證總有greenlet在運行,而不是等待IO
?
?本身睡覺時間:gecent.sleep()
總結
以上是生活随笔為你收集整理的服务器select与gevent的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python写程序注意事项(很重要)
- 下一篇: MYSQL电脑客户端免安装教程以及出现问