摘要:非阻塞模型這種也很好理解,由阻塞的死等系統(tǒng)響應(yīng)進(jìn)化成多次調(diào)用查看數(shù)據(jù)就緒狀態(tài)。復(fù)用模型,以及它的增強(qiáng)版就屬于該種模型。此時(shí)用戶進(jìn)程阻塞在事件上,數(shù)據(jù)就緒系統(tǒng)予以通知。信號(hào)驅(qū)動(dòng)模型應(yīng)用進(jìn)程建立信號(hào)處理程序時(shí),是非阻塞的。
引言
之前的兩篇文章 FastThreadLocal怎么Fast?、ScheduledThreadPoolExecutor源碼解讀 搞的我心力交瘁,且讀源碼過程中深感功力不足,遂決定“磨刀”——先達(dá)到較熟練使用netty的程度,再回過頭來繼續(xù)啃源碼!至于“磨刀石”嘛,選擇了《Netty權(quán)威指南》(第二版)……哎呦,不錯(cuò)奧!
正文其實(shí)本篇文章更像是一篇讀書筆記,記錄了Linux網(wǎng)絡(luò)模型的相關(guān)知識(shí)。為什么要關(guān)注Linux網(wǎng)絡(luò)模型?因?yàn)閖ava的各I/O模型與之關(guān)系緊密!
書中根據(jù)UNIX網(wǎng)絡(luò)編程,作了5種I/O模型分類:
阻塞I/O模型最簡(jiǎn)單的一種,等待直至完成的過程,不多作解釋。
非阻塞I/O模型這種也很好理解,由阻塞I/O的死等系統(tǒng)響應(yīng)進(jìn)化成多次調(diào)用查看數(shù)據(jù)就緒狀態(tài)。
I/O復(fù)用模型select/poll,以及它的增強(qiáng)版epoll就屬于該種模型。與非阻塞I/O模型相比,愚以為有兩點(diǎn)優(yōu)勢(shì):
不需要用戶進(jìn)程進(jìn)行掃描以確認(rèn)數(shù)據(jù)就緒狀態(tài),改為系統(tǒng)層面幫你“掃描”。此時(shí)用戶進(jìn)程阻塞在select事件上,數(shù)據(jù)就緒系統(tǒng)予以通知。
epoll 基于事件驅(qū)動(dòng)的方式代替掃描
這里多提一句,epoll把消息通知給用戶空間時(shí)避免了內(nèi)存復(fù)制(0拷貝),使用的mmap技術(shù),即內(nèi)核和用戶空間映射到同一內(nèi)存實(shí)現(xiàn)。
信號(hào)驅(qū)動(dòng)I/O模型應(yīng)用進(jìn)程建立SIGIO信號(hào)處理程序時(shí),是非阻塞的。而數(shù)據(jù)就緒時(shí),以SIGIO信號(hào)的形式通知到用戶進(jìn)程。
異步I/O模型特點(diǎn)是,幾乎全部交由系統(tǒng)處理,數(shù)據(jù)處理完畢后,才通知到用戶進(jìn)程。
后記以上的描述中,是不是很多詞句都在java I/O相關(guān)的世界中聽到過?是的——阻塞I/O對(duì)應(yīng)BIO,epoll之于NIO,NIO的多路復(fù)用技術(shù)對(duì)標(biāo)I/O復(fù)用模型,以及AIO和異步I/O模型……
好了,that"s all,小記就要有小記的樣子。
最后,再次推薦《Netty權(quán)威指南》!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68445.html
摘要:搞懂了這部分后,我們將明白在世界中扮演的角色進(jìn)擊的此圖展示的已經(jīng)算是優(yōu)化后的了用到了線程池。多線程將這種處理操作分隔出來,非型操作業(yè)務(wù)操作配備以線程池,進(jìn)化成多線程模型這樣的架構(gòu),系統(tǒng)瓶頸轉(zhuǎn)移至部分。 Channel定位 注意:如無(wú)特別說明,文中的Channel都指的是Netty Channel(io.netty.channel) 一周時(shí)間的Channel家族學(xué)習(xí),一度讓我懷疑人生——...
摘要:答曰摸索直譯為服務(wù)加載器,最終目的是獲取的實(shí)現(xiàn)類。代碼走起首先,要有一個(gè)接口形狀接口介紹然后,要有該接口的實(shí)現(xiàn)類。期具體實(shí)現(xiàn)依靠的內(nèi)部類,感性趣的朋友可以自己看一下??偨Y(jié)重點(diǎn)在于可跨越包獲取,這一點(diǎn)筆者通過多模塊項(xiàng)目親測(cè)延時(shí)加載特性 前戲 netty源碼注釋有云: ... If a provider class has been installed in a jar file tha...
摘要:閱讀源碼時(shí),發(fā)現(xiàn)很多,理所當(dāng)然會(huì)想翻閱資料后,該技能,姿勢(shì)如下環(huán)境中的全部屬性全部屬性注意如果將本行代碼放在自定義屬性之后,會(huì)不會(huì)打出把自定義屬性也給獲取到可以結(jié)論會(huì)獲取目前環(huán)境中全部的屬性值,無(wú)論系統(tǒng)提供還是個(gè)人定義系統(tǒng)提供屬性代碼中定義 閱讀源碼時(shí),發(fā)現(xiàn)很多System.getProperty(xxx),理所當(dāng)然會(huì)想:whats fucking this? 翻閱資料后,Get該技能...
摘要:之所以稱它為卡車,只因編程思想中有段比喻我們可以把它想象成一個(gè)煤礦,通道是一個(gè)包含煤層數(shù)據(jù)的礦藏,而緩沖器則是派送到礦藏中的卡車。那么升級(jí)版卡車,自然指的就是。結(jié)構(gòu)和功能之所以再次打造了升級(jí)版的緩沖器,顯然是不滿中的某些弊端。 卡車 卡車指的是java原生類ByteBuffer,這兄弟在NIO界大名鼎鼎,與Channel、Selector的鐵三角組合構(gòu)筑了NIO的核心。之所以稱它為卡車...
摘要:實(shí)現(xiàn)原理淺談幫助理解的示意圖中有一屬性,類型是的靜態(tài)內(nèi)部類。剛剛說過,是一個(gè)中的靜態(tài)內(nèi)部類,則是的內(nèi)部節(jié)點(diǎn)。這個(gè)會(huì)在線程中,作為其屬性初始是一個(gè)數(shù)組的索引,達(dá)成與類似的效果。的方法被調(diào)用時(shí),會(huì)根據(jù)記錄的槽位信息進(jìn)行大掃除。 概述 FastThreadLocal的類名本身就充滿了對(duì)ThreadLocal的挑釁,快男FastThreadLocal是怎么快的?源碼中類注釋坦白如下: /** ...
閱讀 2715·2019-08-30 15:53
閱讀 2899·2019-08-29 16:20
閱讀 1108·2019-08-29 15:10
閱讀 1051·2019-08-26 10:58
閱讀 2219·2019-08-26 10:49
閱讀 660·2019-08-26 10:21
閱讀 734·2019-08-23 18:30
閱讀 1658·2019-08-23 15:58