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

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

JavaIO:BIO、NIO-創(chuàng)新互聯(lián)

3種網(wǎng)絡(luò)編程 I/O 模型:BIO、NIO、AIO

成都創(chuàng)新互聯(lián)公司是專業(yè)的射陽網(wǎng)站建設(shè)公司,射陽接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行射陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
  • BIO:同步并阻塞(傳統(tǒng)阻塞型),一個(gè)連接一個(gè)線程,連接數(shù)目比較小且固定的架構(gòu)場(chǎng)景
  • NIO:同步非阻塞,一個(gè)線程處理多個(gè)連接,連接數(shù)目多且連接比較短的架構(gòu)場(chǎng)景
  • AIO:異步非阻塞,Proactor 模式,有效請(qǐng)求才啟動(dòng)線程,連接數(shù)較多且連接時(shí)間較長(zhǎng)場(chǎng)景
BIO(blocking I/O)
  • 基本介紹:傳統(tǒng)的 Java IO 編程
  • BIO:同步阻塞
  • 簡(jiǎn)單流程
    • 服務(wù)器啟動(dòng)一個(gè) ServerSocket
    • 客戶端啟動(dòng)一個(gè) Socket 進(jìn)行通信,默認(rèn)每個(gè)客戶端建立一個(gè)線程進(jìn)行通訊
    • 客戶端發(fā)起請(qǐng)求后先咨詢服務(wù)器是否有線程響應(yīng),沒有就等待或者被拒絕
      • 有響應(yīng),客戶端線程會(huì)等待請(qǐng)求結(jié)束后,再繼續(xù)執(zhí)行
NIO(Java non-blocking IO)
  • 三大核心部分:Channel、Buffer、Selector
    • 每個(gè) Channel 會(huì)對(duì)應(yīng)一個(gè) Buffer
    • Selector 對(duì)應(yīng)一個(gè)線程,一個(gè)線程對(duì)應(yīng)多個(gè) Channel(連接)
    • Selector 切換到哪個(gè) Channel 由事件決定,Event 就是一個(gè)重要概念
    • Selector 會(huì)根據(jù)不同的事件,在各個(gè)通道上切換
    • Buffer 就是一個(gè)內(nèi)存塊,底層有一個(gè)數(shù)組
    • 數(shù)據(jù)的讀取寫入是通過 Buffer(BIO 要么是輸入或者輸出流,不能雙向,但是NIO的 Buffer 可以讀也可以寫,需要 flip 切換)
    • Channel 是雙向的,可以返回底層操作系統(tǒng)的情況,比如 Linux,底層的操作系統(tǒng)通道就是雙向的
  • NIO 面向緩沖區(qū)或者面向塊
  • 基本介紹
    • 使用線程從某通道發(fā)送請(qǐng)求或者讀取數(shù)據(jù),僅能獲取目前可用的數(shù)據(jù),如果目前沒有數(shù)據(jù)可用,就什么都不會(huì)獲取,而不是保持線程阻塞
    • 通俗理解:用一個(gè)線程處理多個(gè)操作
    • HTTP2.0 使用了多路復(fù)用的技術(shù),做到同一個(gè)連接并發(fā)處理多個(gè)請(qǐng)求,比HTTP1.1大了好幾個(gè)數(shù)量級(jí)
  • NIO 和 BIO
    • BIO 以流處理數(shù)據(jù),NIO 以塊處理數(shù)據(jù),塊 I/O 效率比流 I/O 高很多
    • BIO 阻塞,NIO 非阻塞
    • BIO 基于字節(jié)流和字符流進(jìn)行操作,NIO 基于 Channel 和 Buffer 進(jìn)行操作,數(shù)據(jù)總是從通道讀取到緩沖區(qū),或者從緩沖區(qū)寫入通道中
      • Selector 用于監(jiān)聽多個(gè)通道的事件(連接請(qǐng)求,數(shù)據(jù)到達(dá)),所以單個(gè)線程能監(jiān)聽多個(gè)客戶端通道
  • 緩沖區(qū)(Buffer)
    • 本質(zhì)上就是一個(gè)可以讀寫的內(nèi)存塊,理解成一個(gè)容器對(duì)象(含數(shù)組)
    • 緩沖區(qū)對(duì)象內(nèi)置流一些機(jī)制,能夠跟蹤和記錄緩沖區(qū)的狀態(tài)變化情況
    • 屬性
      • Capacicty:容量,緩沖區(qū)創(chuàng)建的時(shí)候被設(shè)定并且不能改變
      • Limit:當(dāng)前終點(diǎn),不能對(duì)緩沖區(qū)超過極限的位置進(jìn)行讀寫操作,且極限是可以修改的
      • Position:位置,下一個(gè)要被讀或?qū)懙脑氐乃饕?,每次讀寫緩沖區(qū)數(shù)據(jù)時(shí)都會(huì)改變的值,為下次做準(zhǔn)備
      • Mark:標(biāo)記
  • 通道(Channel)
    • NIO 通道類似于流
      • 可以同時(shí)讀寫,流只能讀或者寫
      • 可以實(shí)現(xiàn)異步讀寫數(shù)據(jù)
      • 可以從緩沖讀數(shù)據(jù),可以寫數(shù)據(jù)到緩沖
    • BIO 中的 stream 是單向的,NIO 中的 Channel 是雙向的可讀寫
    • Channel 在 NIO 中時(shí)一個(gè)接口,常用 FileChannel、DatagramChannel、ServerSocketChannel、SocketChannel
      • FileChannel:用于文件的讀寫
      • DatagramChannel:用于 UDP 的數(shù)據(jù)讀寫
      • ServerSocketChannel、SocketChannel 用于 TCP 的數(shù)據(jù)讀寫
  • 選擇器(Selector)
    • 基本介紹
      • Selector 能夠檢測(cè)多個(gè)注冊(cè)的通道上是否有事件發(fā)生,有就獲取事件然后針對(duì)每個(gè)事件進(jìn)行相應(yīng)的處理
      • 只有在連接真正有讀寫事件發(fā)生時(shí),才會(huì)進(jìn)行讀寫,減少開銷
      • 避免多線程之間的上下文切換導(dǎo)致的開銷
    • Selector、SelectionKey、ServerSocketChannel、SocketChannel 關(guān)系
      • 客戶端連接時(shí),會(huì)通過 ServerSocketChannel 得到 SocketChannel
      • Selector 開始監(jiān)聽
      • 將 SocketChannel 注冊(cè)到 Selector 上,一個(gè) Selector 可以注冊(cè)多個(gè) SocketChannel
      • 注冊(cè)后返回一個(gè) SelectionKey 會(huì)和該 Selector 關(guān)聯(lián)(集合)
      • Selector 進(jìn)行監(jiān)聽 select 方法,返回有事件發(fā)生的通道個(gè)數(shù)
      • 進(jìn)一步得到各個(gè) SelectionKey(有事件發(fā)生)
      • 再通過 SelectionKey 反向獲取 SocketChannel
      • 可以通過 channel() 方法得到 channel,完成業(yè)務(wù)處理
    • SelectionKey
      • 表示 Selector 和網(wǎng)絡(luò)通道的注冊(cè)關(guān)系
        • OP_ACCEPT:有新的網(wǎng)絡(luò)連接可以 accept,值為 16
        • OP_CONNECT:代表連接已經(jīng)建立,值為 8
        • OP_WRITE:代表寫操作,值為 4
        • OP_READ:代表讀操作,值為 1
    • ServerSocketChannel
      • 在服務(wù)器端監(jiān)聽新的客戶端 Socket 連接
      • 相關(guān)方法
        • open:得到一個(gè) ServerSocketChannel 通道
        • bind:設(shè)置服務(wù)器端口號(hào)
        • configureBlocking:設(shè)置阻塞或非阻塞模式
        • accept:接受一個(gè)連接
        • register:注冊(cè)一個(gè)選擇器并設(shè)置監(jiān)聽事件
    • SocketChannel
      • 網(wǎng)絡(luò) IO 通道,具體負(fù)責(zé)進(jìn)行讀寫操作,NIO 把緩沖區(qū)的數(shù)據(jù)寫入通道,或者把通道數(shù)據(jù)寫入緩沖區(qū)
      • 相關(guān)方法
        • open
        • configureBlocking
        • connect
        • finnishConnect
        • write
        • read
        • register
        • close
  • 存在問題
    • NIO 類庫和 API 繁雜,需要熟練掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等
    • 需要具備 Java 多線程編程,NIO 編程涉及 Reactor 模式,必須對(duì)多線程和網(wǎng)絡(luò)編程非常熟悉才能寫出高質(zhì)量的 NIO 程序
    • 開發(fā)工作量和難度都非常大,例如:臨斷連重連、網(wǎng)絡(luò)閃斷、半包讀寫、失敗緩存、網(wǎng)絡(luò)擁塞和異常流
    • NIO Bug:Epoll Bug,導(dǎo)致 Selector 空輪詢,CPU 100%

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


文章標(biāo)題:JavaIO:BIO、NIO-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://weahome.cn/article/hhjij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部