前國內的網遊研發,在伺服器使用的開發平台方面,win和linux的比例各佔多少,我一時半會也沒有準確資料,但從我了解的這麼多公司情況來看,用
者都是處理非同步io的高效模型,這種高效,除了「非同步處理」這個共同的特徵之外,二者都可以通過指標攜帶應用層資料:在iocp裡,應用層資料可以通過單
控制代碼資料和單io資料來與iocp底層通訊;而在epoll裡,可以通過epoll_data裡的"void
*ptr"來傳遞。這是一種很重要的思想,也是它們高效的原因所在:當事件的通知到來時,它不僅告訴你發生了什麼樣的事件,還同時告訴這次事件所操作的數
據是哪些。
那麼,epoll和iocp到底又有什麼不同呢?
以我目前粗淺的使用經驗來看,至少可以得到以下結論:
1.iocp是在io操作完成之後,才通過get函式返回這個完成通知的;而epoll則不是在io操作完成之後才通知你,它的工作原理是,你如果想進行io操作時,先向epoll查詢是否可讀或可寫,如果處於可讀或可寫狀態後,epoll會通過epoll_wait函式通知你,此時你再進行進一步的recv或send操作。
2.在1的基礎上,我們其實可以看到,epoll僅僅是乙個非同步事件的通知機制,其本身並不作任何的io讀寫操作,它只負責告訴你是不是可以讀或可以寫了,而
具體的讀寫操作,還要應用層自己來作;但iocp的封裝就要多一些,它不僅會有完成之後的事件通知,更重要的是,它同時封裝了一部分的io控制邏輯。從這
一點上來看,iocp的封裝似乎更全面一點,但是,換個角度看,epoll僅提供這種機制也是非常好的,它保持了事件通知與io操作之間彼此的獨立性,使
得epoll的使用更加靈活。
這只是我初步使用epoll開發過程中的體會,以後有更深的體會時還會發上來跟大家分享。
IOCP模型與EPOLL模型的比較
一 iocp和epoll之間的異同。異 1 iocp是windows系統下使用。epoll是linux系統下使用。2 iocp是io操作完畢之後,通過get函式獲得乙個完成的事件通知。epoll是當你希望進行乙個io操作時,向epoll查詢是否可讀或者可寫,若處於可讀或可寫狀態後,epoll會通過e...
IOCP模型和EPOLL模型的比較
iocp模型與epoll模型的比較 iocp i o completion port 常稱i o完成埠。iocp模型屬於一種通訊模型,適用於 能控制併發執行的 高負載伺服器的乙個技術。通俗一點說,就是用於高效處理很多很多的客戶端進行資料交換的乙個模型。或者可以說,就是能非同步i o操作的模型。三 網...
epoll與select的區別
epoll跟select都能提供多路i o復用的解決方案。在現在的linux核心裡有都能夠支援,其中epoll是linux所特有,而select則應該是posix所規定,一般作業系統均有實現。網上現在關於這兩者不同的介紹已經到處都是了。我這裡也不能多說出什麼東西,只是記錄下我看了實現 之後的一些總結...