select和epoll


什么是select,它的工作原理,優缺點?
select是多路復用模型下的一個模塊,
工作原理:
通過調用select,向內核拷貝fd(文件描述符),
內核監視select下的所有套接字,會遍歷所有套接字,查看是否有事件發生,
沒有事件發生則睡眠,直到有事件發生,或者timeout時間到了后,喚醒,再次遍歷,
內核一旦查看到有事件發生,則返回遍歷后的fd,
將fd從內核拷貝到用戶空間,用戶進程再根據fd遍歷一遍,找到發生事件的套接字
優點:使服務端達到並發的效果,只用到單線程,所用的cpu資源少,減少了網絡io堵塞
缺點:
1,遍歷的fd在linux上有數量限制,1024個
2,fd從用戶態拷貝到內核態,每次都需要復制,產生巨大的開銷
3.對fd的掃描形式是一種遍歷的方式,要找到發生的事件必須從頭開始掃,
對沒有發生事件的fd做了大量無用功.

 

什么是epoll,工作原理,優缺點?
epoll是linux系統提供的多路復用模塊
工作原理:
epoll模塊提供了三個函數調用,分別是epoll_creat,epoll_ctl,epoll_wait
調用epoll_create,創建紅黑樹,和就緒鏈接表
調用epoll_ct,若要添加新的句柄,如果存在則返回,
不存在則添加到樹干上,然后向內核注冊回調函數,
當事件發生的時候,可以往就緒鏈接表中插入數據
調用epoll_wait,查看就緒鏈接表中有沒有就緒的fd,
如果有則返回就緒的fd數目,通過mmap(內存映射技術)得到相應的文件描述符,
沒有則睡眠,直到有就緒的fd或者timeout時間到了
優點:
1,沒有最大的fd限制,只受到服務端內存大小的限制
2.效率提升,只有句柄中有事件發生,就會調用回調函數,把相應的fd放到就緒鏈接表中,
不用從頭開始遍歷fd,
3.省去了不必要的內存拷貝,如mmap技術
缺點:
當fd數量較少時,epoll的速度不見得比select的速度快
對於單個連接,不存在優勢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM