java - 为什么NIO的性能比IO好?
阿神
阿神 2017-04-17 17:39:32
0
5
607

我目前已知的原因只有这1个: 就是由于NIO采用缓冲区+通道的方式来传输数据, 而不是IO包的以字节或字符为单元传输数据, 增加了一次处理数据的字节数, 而且这种方式更接近于底层操作系统的IO方式, 所以速度明显优于IO;

除了这一点还有其他的吗?

阿神
阿神

闭关修行中......

全部回覆(5)
迷茫

0zhangzhun132·剛剛

1.io是面向流的,也就是讀取資料的時候是從流上逐一讀取,所以資料不能進行整體以為,沒有緩衝區;nio是面向緩衝區的,資料是儲存在緩衝區中,讀取資料是在緩衝區中進行,所以進行資料的偏移操作更加方便
2,io是阻塞的,當一個執行緒操作io時如果目前沒有資料可讀,那麼執行緒阻塞,nio由於是對通道操作io,所以是非阻塞,當一個通道無資料可讀,可切換通道處理其他io
3,nio有selecter選擇器,就是線程透過選擇器可以選擇多個通道,而io只能處理一個

純手打,希望對你有幫助

EOF

洪涛

假設在下面的場景中:在一台4核的機器上,接收網路的請求,處理業務邏輯,將處理結果傳回給客戶端,其中網路請求1萬/s,在業務邏輯處理中,有寫入檔案的操作,需要阻塞5秒的處理時間,假設傳輸不耗費時間。

1.使用BIO處理:

由於業務邏輯處理中的IO時間較長,會阻塞掉處理線程,在多請求的情況下,一個請求就產生一條線程來處理業務,那麼在5s內,需要有5萬條線程存在系統中,用於處理業務邏輯。 CPU會有大部分的資源用來處理執行緒調度。

2.使用NIO處理:
在NIO中的IO操作是異步的,不會阻塞業務邏輯線程,在多請求的情況下,開啟4條業務線程,一條線程佔用一個CPU核心,業務線程可以全速處理業務邏輯。對於業務中IO操作,可以在硬體中非同步處理,在資料準備好的時候才發送訊息給CPU進行後續業務處理,那麼此時只需要4個執行緒就可以高效的處理業務,而CPU幾乎沒有閒置,不需要耗費資源在執行緒調度中。

刘奇

無論是IO還是NIO,都是Linux網路I/O模型的體現,建議學習下Linux網路模型。

Ty80

1.nio做了記憶體映射,少了一次用戶空間和系統空間之間的拷貝
2.nio是異步,觸發式的響應,非阻塞式的響應,充分利用了系統資源,主要是cpu

巴扎黑

嘿嘿

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板