原文:認(rèn)識(shí)Java I/O | BIO NIO AIO
一、名詞解釋
1.1 同步與異步
同步與異步更關(guān)注交互雙方是否可以同時(shí)工作
- 同步:請(qǐng)求 -> 等待返回 -> 返回 -> 下一次請(qǐng)求,需要等待結(jié)果返回(CS非同時(shí)工作);
- 異步:客戶端一直請(qǐng)求,服務(wù)端一直處理,不用等待結(jié)果返回,比如Future(CS同時(shí)工作);
1.2 阻塞與非阻塞
阻塞與非阻塞關(guān)注交互雙方是否可以一心多用
- 阻塞:A->B,A一直等著B響應(yīng),期間不去干別的(一心一用);
- 非阻塞:A->B,A請(qǐng)求完成可以干別的,B響應(yīng)了再回來繼續(xù)處理(一心多用);
1.3 偽異步I/O
本質(zhì)上還是同步阻塞I/O
不過是在服務(wù)器把socket鏈接封裝成Task提交給線程池處理
因?yàn)橛嘘?duì)列,所以可以突破C:S=1:1的比例
1.4 I/O多路復(fù)用
通過把多個(gè)I/O的阻塞復(fù)用到一個(gè)阻塞上,從而使得系統(tǒng)在單線程情況下可以處理多個(gè)客戶端的請(qǐng)求。
類似于linux的epoll、select
1.5 多路復(fù)用器
Selector,核心是通過Selector來輪詢注冊(cè)在其上的Channel
當(dāng)發(fā)現(xiàn)有Channel就緒就返回Channel的選擇鍵集合,進(jìn)行I/O操作;
二、不同I/O模型對(duì)比表格

不同I/O模型對(duì)比表格.png
三、參考
- 《Netty權(quán)威指南 2th》