真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

多路復(fù)用IO實(shí)現(xiàn)方式:select,poll,epoll的區(qū)別

三種多路復(fù)用IO實(shí)現(xiàn)方式:select,poll,epoll的區(qū)別

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)花山,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

直接看表:
多路復(fù)用IO實(shí)現(xiàn)方式:select,poll,epoll的區(qū)別

以下內(nèi)容轉(zhuǎn)載于:http://watter1985.iteye.com/blog/1614039

以上文章內(nèi)部有select/poll/epoll的具體實(shí)現(xiàn)。

內(nèi)核調(diào)用總結(jié):

poll/select/epoll的實(shí)現(xiàn)都是基于文件提供的poll方法(f_op->poll),
該方法利用poll_table提供的_qproc方法向文件內(nèi)部事件掩碼_key對(duì)應(yīng)的的一個(gè)或多個(gè)等待隊(duì)列(wait_queue_head_t)上添加包含喚醒函數(shù)(wait_queue_t.func)的節(jié)點(diǎn)(wait_queue_t),并檢查文件當(dāng)前就緒的狀態(tài)返回給poll的調(diào)用者(依賴于文件的實(shí)現(xiàn))。
當(dāng)文件的狀態(tài)發(fā)生改變時(shí)(例如網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)),文件就會(huì)遍歷事件對(duì)應(yīng)的等待隊(duì)列并調(diào)用回調(diào)函數(shù)(wait_queue_t.func)喚醒等待線程。

 poll 和 select

poll和select的實(shí)現(xiàn)基本上是一致的,只是傳遞參數(shù)有所不同,他們的基本流程如下:

1. 復(fù)制用戶數(shù)據(jù)到內(nèi)核空間

2. 估計(jì)超時(shí)時(shí)間

3. 遍歷每個(gè)文件并調(diào)用f_op->poll 取得文件當(dāng)前就緒狀態(tài), 如果前面遍歷的文件都沒有就緒,向文件插入wait_queue節(jié)點(diǎn)

4. 遍歷完成后檢查狀態(tài):

        a). 如果已經(jīng)有就緒的文件轉(zhuǎn)到5;

        b). 如果有信號(hào)產(chǎn)生,重啟poll或select(轉(zhuǎn)到 1或3);

        c). 否則掛起進(jìn)程等待超時(shí)或喚醒,超時(shí)或被喚醒后再次遍歷所有文件取得每個(gè)文件的就緒狀態(tài)

5. 將所有文件的就緒狀態(tài)復(fù)制到用戶空間

6. 清理申請(qǐng)的資源

公共函數(shù)

 下面是poll/select公用的一些函數(shù),這些函數(shù)實(shí)現(xiàn)了poll和select的核心功能。

poll_initwait 用于初始化poll_wqueues,

__pollwait 實(shí)現(xiàn)了向文件中添加回調(diào)節(jié)點(diǎn)的邏輯,

pollwake 當(dāng)文件狀態(tài)發(fā)生改變時(shí),由文件調(diào)用,用來喚醒線程,

poll_get_entry,free_poll_entry,poll_freewait用來申請(qǐng)釋放poll_table_entry 占用的內(nèi)存,并負(fù)責(zé)釋放文件上的wait_queue節(jié)點(diǎn)。

其中,poll,select對(duì)poll_table_entry的申請(qǐng)和釋放采用的是類似內(nèi)存池的管理方式,先使用預(yù)分配的空間,預(yù)分配的空間不足時(shí),分配一個(gè)內(nèi)存頁,使用內(nèi)存頁上的空間。

流程圖:

多路復(fù)用IO實(shí)現(xiàn)方式:select,poll,epoll的區(qū)別

epoll而言:

遞歸深度檢測(ep_call_nested)

循環(huán)檢測(ep_loop_check)

 喚醒風(fēng)暴檢測(reverse_path_check)

流程圖:

多路復(fù)用IO實(shí)現(xiàn)方式:select,poll,epoll的區(qū)別


新聞標(biāo)題:多路復(fù)用IO實(shí)現(xiàn)方式:select,poll,epoll的區(qū)別
文章URL:http://weahome.cn/article/pjdghh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部