麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Python中sellect、poll、epoll三者的區別

Python中sellect、poll、epoll三者的區別

來源:千鋒教育
發布人:xqq
時間: 2023-11-07 14:31:34 1699338694

select

select最早于1983年出現在4.2BSD中,它通過一個select()系統調用來監視多個文件描述符的數組,當select()返回后,該數組中就緒的文件描述符便會被內核修改標志位,使得進程可以獲得這些文件描述符從而進行后續的讀寫操作。

select目前幾乎在所有的平臺上支持,其良好跨平臺支持也是它的一個優點,事實上從現在看來,這也是它所剩不多的優點之一。

select的一個缺點在于單個進程能夠監視的文件描述符的數量存在最大限制,在Linux上一般為1024,不過可以通過修改宏定義甚至重新編譯內核的方式提升這一限制。

另外,select()所維護的存儲大量文件描述符的數據結構,隨著文件描述符數量的增大,其復制的開銷也線性增長。同時,由于網絡響應時間的延遲使得大量TCP連接處于非活躍狀態,但調用select()會對所有socket進行一次線性掃描,所以這也浪費了一定的開銷。

poll

poll在1986年誕生于SystemVRelease3,它和select在本質上沒有多大差別,但是poll沒有最大文件描述符數量的限制。

poll和select同樣存在一個缺點就是,包含大量文件描述符的數組被整體復制于用戶態和內核的地址空間之間,而不論這些文件描述符是否就緒,它的開銷隨著文件描述符數量的增加而線性增大。

另外,select()和poll()將就緒的文件描述符告訴進程后,如果進程沒有對其進行IO操作,那么下次調用select()和poll()的時候將再次報告這些文件描述符,所以它們一般不會丟失就緒的消息,這種方式稱為水平觸發(LevelTriggered)。

epoll

直到Linux2.6才出現了由內核直接支持的實現方法,那就是epoll,它幾乎具備了之前所說的一切優點,被公認為Linux2.6下性能最好的多路I/O就緒通知方法。

epoll可以同時支持水平觸發和邊緣觸發(EdgeTriggered,只告訴進程哪些文件描述符剛剛變為就緒狀態,它只說一遍,如果我們沒有采取行動,那么它將不會再次告知,這種方式稱為邊緣觸發),理論上邊緣觸發的性能要更高一些,但是代碼實現相當復雜。

epoll同樣只告知那些就緒的文件描述符,而且當我們調用epoll_wait()獲得就緒文件描述符時,返回的不是實際的描述符,而是一個代表就緒描述符數量的值,你只需要去epoll指定的一個數組中依次取得相應數量的文件描述符即可,這里也使用了內存映射(mmap)技術,這樣便徹底省掉了這些文件描述符在系統調用時復制的開銷。

另一個本質的改進在于epoll采用基于事件的就緒通知方式。在select/poll中,進程只有在調用一定的方法后,內核才對所有監視的文件描述符進行掃描,而epoll事先通過epoll_ctl()來注冊一個文件描述符,一旦基于某個文件描述符就緒時,內核會采用類似callback的回調機制,迅速激活這個文件描述符,當進程調用epoll_wait()時便得到通知。

使用select:

在python中,select函數是一個對底層操作系統的直接訪問的接口。它用來監控sockets、files和pipes,等待IO完成(WaitingforI/Ocompletion)。當有可讀、可寫或是異常事件產生時,select可以很容易的監控到。

select.select(rlist,wlist,xlist[,timeout])傳遞三個參數,一個為輸入而觀察的文件對象列表,一個為輸出而觀察的文件對象列表和一個觀察錯誤異常的文件列表。第四個是一個可選參數,表示超時秒數。其返回3個tuple,每個tuple都是一個準備好的對象列表,它和前邊的參數是一樣的順序。下面,主要結合代碼,簡單說說select的使用。

Server端程序:

1、該程序主要是利用socket進行通信,接收客戶端發送過來的數據,然后再發還給客戶端。

2、首先建立一個TCP/IPsocket,并將其設為非阻塞,然后進行bind和listen。

3、通過select函數獲取到三種文件列表,分別對每個列表的每個元素進行輪詢,對不同socket進行不同的處理,最外層循環直到inputs列表為空為止

4、當設置timeout參數時,如果發生了超時,select函數會返回三個空列表。

以上內容為大家介紹了Python中sellect、poll、epoll三者的區別,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。

tags: python培訓
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 国产真实迷j在线播放| 欧美日韩电影在线观看| 欧美性bbbbbxxxxxxx| 亚洲中字慕日产2020| acg里番全彩| 下面一进一出好爽视频| 精品无码久久久久久国产| 欧美丰满白嫩bbxx| 欧美伦理影院| 人人爽天天碰天天躁夜夜躁 | 大佬的365天第三季完整视频在线观看 | 在线播放国产一区二区三区| 国产999在线观看| 动漫精品第一区二区三区| 香港三级韩国三级人妇三| 一个上面吃一个下免费| 韩国黄色网| 美女久久久久久久久久久 | 一级日本强免费| 国产视频一区二区在线观看| 岛国视频在线观看免费播放| 一区国严二区亚洲三区| 久久久久久久久久国产精品免费| 蜜桃熟了3| 果冻传媒麻豆影视在线观看免费版| 处处吻动漫高清在线观看| 亚洲天堂导航| 国产精品美女视视频专区| 中文字幕精品一区二区精品| 亚洲aⅴ男人的天堂在线观看| 黑人异族日本人hd| 亚洲福利二区| eeuss影院在线观看| 麻豆三级视频| 女让张开腿让男人桶视频 | 久久99国产精品久久99| 亲密爱人完整版在线观看韩剧| 欧美性最猛xxxx在线观看视频| a毛片在线看片免费| 538在线观看| 日韩三级在线免费观看|