久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何分析NIO

共計(jì) 1848 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

今天就跟大家聊聊有關(guān)如何分析 NIO,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

linux 下五種 I / O 模型

1)阻塞 I /O

2) 非阻塞 I /O

3)I/ O 復(fù)用

4)信號(hào)驅(qū)動(dòng) I /O

5)異步 I /O

前四種都是同步,只有最后一種才是異步 IO.

1、同步 IO: 如果一個(gè)線程請(qǐng)求進(jìn)行 IO 操作,在 IO 操作完成之前,該線程會(huì)被阻塞!

2、異步 IO: 如果一個(gè)線程請(qǐng)求進(jìn)行 IO 操作,IO 操作不會(huì)導(dǎo)致請(qǐng)求線程被阻塞!

同步和異步是針對(duì)用戶線程和內(nèi)核的交互來(lái)說(shuō)的。同步 IO,用戶發(fā)出 IO 請(qǐng)求,如果數(shù)據(jù)沒(méi)有就緒,需要通過(guò)用戶線程或者內(nèi)核不斷的輪詢數(shù)據(jù)是否就緒,當(dāng)數(shù)據(jù)

就緒時(shí),再將數(shù)據(jù)從內(nèi)核拷貝到用戶線程。

異步 IO 和同步關(guān)鍵區(qū)別:數(shù)據(jù)拷貝階段是由用戶線程完成還是有內(nèi)核完成

緩沖區(qū):緩沖區(qū)的三個(gè)狀態(tài)變量:容量 capacity、讀寫(xiě)限制 limit、讀寫(xiě)位置 position。需要正確理解!

通道:NIO 特性,通道不是從 IO 操作所處理的數(shù)據(jù)這個(gè)層次上去抽象,而是表示為一個(gè)已經(jīng)建立好的到支持 IO 操作的實(shí)體的鏈接。一旦建立這個(gè)連接,就可以在這個(gè)

連接上進(jìn)行各種 IO 操作。具體做什么操作取決于通道的特性,一般的操作讀和寫(xiě)等。在 java NIO 中,不同的實(shí)體有不同的通道實(shí)現(xiàn),比如文件通道和網(wǎng)絡(luò)通道等。

通道在進(jìn)行讀寫(xiě)操作時(shí)都是使用緩沖區(qū)實(shí)現(xiàn)的,而不是字節(jié)數(shù)組。

套接字通道:

傳統(tǒng)的 IO 是阻塞式的,可以一旦有請(qǐng)求就建立連接進(jìn)行處理,這種一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)線程的方式,顯然不適合負(fù)載壓力比較大的情況,因?yàn)槊總€(gè)線程都要占用資源,

創(chuàng)建線程也是有代價(jià)的,對(duì)此引用線程池的實(shí)現(xiàn),以能夠復(fù)用已有的線程問(wèn)題,當(dāng)某個(gè)線程由于等待網(wǎng)絡(luò)操作而阻塞時(shí),其他線程還可以繼續(xù)執(zhí)行,整體性能和吞吐量

得到了提高。不過(guò)由于多線程太復(fù)雜,容易出現(xiàn)很多隱含的錯(cuò)誤(*)。

javaNIO 提供了非阻塞式和多路復(fù)用的套字節(jié)連接

1、阻塞式套節(jié)字通道

2、多路復(fù)用套字節(jié)通道

通過(guò)一個(gè)專門(mén)的選擇器(selector)來(lái)同時(shí)對(duì)多個(gè)套接字通道進(jìn)行監(jiān)聽(tīng)。當(dāng)其中的某個(gè)套接字通道上有它感興趣的事件發(fā)生時(shí),這些通道會(huì)變?yōu)榭捎玫臓顟B(tài),

可以在選擇器的選擇操作中被選中。選擇器通過(guò)一次選擇操作可以獲取這些被選中的通道列表,然后根據(jù)所發(fā)生的事件類型分別進(jìn)行處理。

核心:選擇器,非阻塞的套接字通道可以注冊(cè)到 selector 上,》在進(jìn)行注冊(cè)時(shí)需要提供一個(gè)套接字通道感興趣的事件列表,這些事件包括連接完成、接收到新連接請(qǐng)求、

有數(shù)據(jù)可讀和可以寫(xiě)入數(shù)據(jù)等。這些事件都定義在 SelectionKey 類中,在完成注冊(cè)后可以通過(guò) selector 的 select 方法進(jìn)行選擇。》選擇之后可以從 Selector 類的對(duì)象中得到一個(gè)可用的

套接字通道的列表。

3、IP 組播通道

通過(guò) IP 協(xié)議的組播(multicasting)支持可以將數(shù)據(jù)報(bào)文傳輸給屬于同一分組的多個(gè)主機(jī)。當(dāng)不同主機(jī)上的程序都需要接收相同的數(shù)據(jù)報(bào)文時(shí),使用 IP 組播是最自然地方式。

每一條組播消息都會(huì)被屬于特定分組的所有主機(jī)接收到。每個(gè)組播分組都有一個(gè)對(duì)應(yīng)的標(biāo)識(shí)符,該標(biāo)識(shí)符是一個(gè) D 類 IP 地址,范圍在“224.0.0.1”和“239.255.255.255”之間。

進(jìn)行組播的程序可以選擇加入某個(gè)組播分組來(lái)接收所有發(fā)送給該分組的消息。

通道分為兩大類:文件通道、Socket 通道

通道與流:通道時(shí)雙向的,而流只是從這一個(gè)方向到另一個(gè)方向。通道可以讀或?qū)懟蛘咄瑫r(shí)讀寫(xiě)。

管道:Pipe,廣義上講,管道就是一個(gè)用來(lái)在兩個(gè)實(shí)體之間單向傳輸數(shù)據(jù)的管道,管道通常被用來(lái)連接一個(gè)進(jìn)程的輸出和另一個(gè)進(jìn)程的輸入。Pipe 類實(shí)現(xiàn)一個(gè)管道范例,

不過(guò)它所創(chuàng)建的管道式進(jìn)程內(nèi)(在 java 虛擬機(jī)進(jìn)程內(nèi)部)而非進(jìn)程間使用的。

管道有一對(duì)通道組成:一個(gè)可寫(xiě)入的 sink 通道和一個(gè)可讀取的 source 通道。一旦將某些字節(jié)寫(xiě)入接收器的通道,就可以按照與寫(xiě)入時(shí)完全相同的順序從源通道中

讀取這些字節(jié)。

通道:

DatagramChannel, 針對(duì)面向數(shù)據(jù)報(bào)套接字的可選擇通道

Pipe.SinkChannel, 表示 Pipe 的可寫(xiě)入結(jié)尾的通道。 

Pipe.SourceChannel, 表示 Pipe 的可讀取結(jié)尾的通道。 

ServerSocketChannel, 針對(duì)面向流的偵聽(tīng)套接字的可選擇通道。 

SocketChannel,針對(duì)面向流的連接套接字的可選擇通道。

看完上述內(nèi)容,你們對(duì)如何分析 NIO 有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計(jì)1848字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 聂拉木县| 丹寨县| 青冈县| 南靖县| 来安县| 应城市| 深水埗区| 赫章县| 五常市| 南召县| 太仓市| 武胜县| 新安县| 海林市| 绵竹市| 安丘市| 南和县| 宜宾市| 长葛市| 阜新市| 绿春县| 扎兰屯市| 博罗县| 大田县| 龙山县| 手机| 绍兴县| 毕节市| 新龙县| 伊吾县| 元氏县| 贵溪市| 凤阳县| 榆树市| 宜兴市| 磴口县| 逊克县| 潞西市| 高安市| 新平| 江津市|