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

1.io是面向流的,也就是讀取資料的時候是從流上逐一讀取,所以資料不能進行整體以為,沒有緩衝區;nio是面向緩衝區的,資料是儲存在緩衝區中,讀取資料是在緩衝區中進行,所以進行資料的偏移操作更加方便2,io是阻塞的,當一個執行緒操作io時如果目前沒有資料可讀,那麼執行緒阻塞,nio由於是對通道操作io,所以是非阻塞,當一個通道無資料可讀,可切換通道處理其他io3,nio有selecter選擇器,就是線程透過選擇器可以選擇多個通道,而io只能處理一個
純手打,希望對你有幫助
假設在下面的場景中:在一台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網路模型。
1.nio做了記憶體映射,少了一次用戶空間和系統空間之間的拷貝2.nio是異步,觸發式的響應,非阻塞式的響應,充分利用了系統資源,主要是cpu

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網路模型。
1.nio做了記憶體映射,少了一次用戶空間和系統空間之間的拷貝
2.nio是異步,觸發式的響應,非阻塞式的響應,充分利用了系統資源,主要是cpu
嘿嘿