国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

swoole事件處理流程

2024-05-04 21:51:03
字體:
供稿:網(wǎng)友

本篇文章的主要內(nèi)容是關(guān)于對swoole事件處理流程的解析,感興趣的朋友可以了解一下,希望本文能對你有所幫助。

了解swoole事件處理流程,先了解兩種網(wǎng)絡(luò)事件處理模式。

Reactor模式

它要求主線程(I/O處理單元)只負(fù)責(zé)監(jiān)聽文件描述符上是否有事件發(fā)生,有的話就立即將該事件通知工作線程/進(jìn)程(邏輯單元)。除此之外,主線程不做任何其他工作。讀寫數(shù)據(jù),接受新的連接,以及處理客戶請求均在工作線程中完成。

Proactor模式

兩種實(shí)現(xiàn)

使用I/O異步模型實(shí)現(xiàn)Proactor模式。原理:將所有I/O操作都交給主線程,主線程配合和內(nèi)核來處理,業(yè)務(wù)邏輯操作就交給邏輯單元。例如使用aio_read來實(shí)現(xiàn)。

工作流程:

主線程調(diào)用aio_read函數(shù)向內(nèi)核注冊socket上的讀完成事件。

主線程繼續(xù)處理其他I/O事件。

當(dāng)socket上的數(shù)據(jù)被讀入用戶緩沖區(qū)后,內(nèi)核向應(yīng)用程序(邏輯單元)發(fā)送一個信號,通知應(yīng)用程序數(shù)據(jù)可用。

應(yīng)用程序讀取數(shù)據(jù)(客戶端的請求),處理完后,調(diào)用aio_write函數(shù)向內(nèi)核注冊socket上的寫事件。

主線程繼續(xù)處理其他邏輯。

當(dāng)用戶緩沖區(qū)的數(shù)據(jù)寫入socket后,內(nèi)核向應(yīng)用程序發(fā)送一個信號,通知應(yīng)用程序數(shù)據(jù)發(fā)送完畢。

應(yīng)用程序預(yù)先定義好的信號處理函數(shù)來處理善后處理,比如關(guān)閉socket.

使用I/O同步模型實(shí)現(xiàn)Proactor模式。原理:主線程執(zhí)行I/O事件數(shù)據(jù)的讀寫操作,業(yè)務(wù)邏輯操作就交給邏輯單元。例如使用epoll來實(shí)現(xiàn)。

工作流程:

主線程往epoll內(nèi)核事件表中注冊socket上的讀就緒事件。

主線程調(diào)用epoll_wait等待socket上有數(shù)據(jù)可讀。

epoll_wait有返回后,主線程從socket上讀取數(shù)據(jù),然后將讀取到的數(shù)據(jù)封裝成一個請求對象(客戶端的請求),并插入請求隊(duì)列。

于是隊(duì)列的消費(fèi)者線程處理請求對象,然后在epoll內(nèi)核事件表中注冊socket上的寫就緒事件。

主線程調(diào)用epoll_wait等待socket可寫。

當(dāng)socket可寫時(shí),epoll_wait通知主線程。主線程往socket寫入請求結(jié)果。

可以看出,如果我們把Reactor線程和Work進(jìn)程組合起來,看成工作線程的話,swoole使用的是reactor事件處理模式。

一個請求經(jīng)歷的步驟如下:

1. 服務(wù)器主線程等待客戶端連接。

2. Reactor線程處理接連socket,讀取socket上的請求數(shù)據(jù)(Receive),將請求封裝好后投遞給work進(jìn)程。

3. Work進(jìn)程就是邏輯單元,處理業(yè)務(wù)數(shù)據(jù)。

4. Work進(jìn)程結(jié)果返回給Reactor線程。

5. Reactor線程將結(jié)果寫回socket(Send)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 自贡市| 平陆县| 西林县| 东兰县| 盈江县| 汉寿县| 峨山| 平潭县| 宁城县| 白玉县| 吐鲁番市| 襄樊市| 汽车| 华阴市| 浦江县| 昌都县| 龙泉市| 呼图壁县| 怀安县| 柘城县| 庆阳市| 休宁县| 廉江市| 岑溪市| 砚山县| 财经| 陆河县| 株洲市| 平乐县| 达州市| 湘潭县| 宝清县| 城固县| 宜阳县| 澄迈县| 邵东县| 武宣县| 准格尔旗| 玉环县| 奈曼旗| 合川市|