摘要:一基礎(chǔ)水平觸發(fā)基本概念讀緩沖區(qū)不為空時(shí)讀事件觸發(fā)。開啟時(shí),會把監(jiān)聽套接字所有可讀的事件全部讀取,此時(shí)可以使用邊沿觸發(fā)。但為了保證連接不丟失,仍然采用水平觸發(fā)通信套接字設(shè)置對于與客戶端通信使用的套接字默認(rèn)使用水平觸發(fā)。
一. 基礎(chǔ) 1.1 水平觸發(fā) 基本概念
讀緩沖區(qū)不為空時(shí), 讀事件觸發(fā)。
寫緩沖區(qū)不為滿時(shí), 寫事件觸發(fā)。
處理流程
accept新的連接, 監(jiān)聽讀事件。
讀事件到達(dá), 處理讀事件。
需要寫入數(shù)據(jù), 向fd中寫數(shù)據(jù), 一次無法寫完, 開啟寫事件監(jiān)聽。
寫事件到達(dá), 繼續(xù)寫入數(shù)據(jù), 寫完后關(guān)閉寫事件。
優(yōu)缺點(diǎn)
不會遺漏事件, 易編程。
長連接需要寫入的數(shù)據(jù)量大時(shí), 會頻繁開啟關(guān)閉寫事件。
讀緩沖區(qū)狀態(tài)變化時(shí), 讀事件觸發(fā), 網(wǎng)卡接受到新數(shù)據(jù)。
寫緩沖區(qū)狀態(tài)變化時(shí), 寫事件觸發(fā), 網(wǎng)卡發(fā)出了新數(shù)據(jù)。
處理流程
accept新的連接, 同時(shí)監(jiān)聽讀寫事件。
讀事件到達(dá), 需要一直讀取數(shù)據(jù), 直到返回EAGAIN。
寫事件到達(dá), 無數(shù)據(jù)處理則不處理, 有數(shù)據(jù)待寫入則一直寫入,直到寫完或者返回EAGAIN。
優(yōu)缺點(diǎn)
不需要頻繁開啟關(guān)閉事件, 效率較高。
讀寫事件處理不當(dāng), 可能導(dǎo)致事件丟失, 編程教復(fù)雜。
對于讀事件而言,總體而言, 采用水平觸發(fā)方式較好。應(yīng)用程序在讀取數(shù)據(jù)時(shí),可能會一次無法讀取全部數(shù)據(jù),邊沿觸發(fā)在下一次可能不會觸發(fā)。如果能夠保證一次讀取緩存的全部數(shù)據(jù),可以采用邊沿觸發(fā),效率更高, 但同時(shí)編程復(fù)雜度也高。
對于寫事件,當(dāng)客戶端服務(wù)端采用短連接或者采用長連接但發(fā)送的數(shù)據(jù)量比較少時(shí)(例如: Redis), 采用水平觸發(fā)即可。當(dāng)客戶端與服務(wù)端是長連接并且數(shù)據(jù)寫入的量比較大時(shí)(例如: nginx), 采用邊沿觸發(fā), 因?yàn)檫呇赜|發(fā)效率更高。
目前,linux不支持讀寫事件分別設(shè)置不同的觸發(fā)方式,具體采用哪種方式觸發(fā),需要根據(jù)具體需求。
監(jiān)聽套接字事件設(shè)置
監(jiān)聽套接字不需要監(jiān)聽寫事件,只需要監(jiān)聽讀事件。
監(jiān)聽套接字一般采用水平觸發(fā)方式。(nginx開啟multi_accept時(shí),會把監(jiān)聽套接字所有可讀的事件全部讀取,此時(shí)可以使用邊沿觸發(fā)。但為了保證連接不丟失,nginx仍然采用水平觸發(fā))
通信套接字設(shè)置
redis對于與客戶端通信使用的套接字默認(rèn)使用水平觸發(fā)。
nginx對于與客戶端通信使用的套接字默認(rèn)采用邊沿觸發(fā)。
https://blog.csdn.net/dongfuy...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40202.html
摘要:深入剖析事件有兩種模型水平觸發(fā)接收緩沖區(qū)不為空有數(shù)據(jù)可讀讀事件一直觸發(fā)發(fā)送緩沖區(qū)不滿可以繼續(xù)寫入數(shù)據(jù)寫事件一直觸發(fā)符合思維習(xí)慣,返回的事件就是的狀態(tài)邊沿觸發(fā)的接收緩沖區(qū)狀態(tài)變化時(shí)觸發(fā)讀事件,即空的接收緩沖區(qū)剛接收到數(shù)據(jù)時(shí)觸發(fā)讀事件的發(fā)送緩沖 epoll LT/ET 深入剖析 EPOLL事件有兩種模型: Level Triggered (LT) 水平觸發(fā).socket接收緩沖區(qū)不為空 有...
閱讀 1673·2023-04-26 02:43
閱讀 3104·2021-11-11 16:54
閱讀 1389·2021-09-23 11:54
閱讀 1207·2021-09-23 11:22
閱讀 2392·2021-08-23 09:45
閱讀 875·2019-08-30 15:54
閱讀 3127·2019-08-30 15:53
閱讀 3214·2019-08-30 15:53