1)讀寫操作不再被同步阻塞
2)壹個服務端在某個時刻只能接收壹個客戶端的接入,通過啟動新線程來提高接入會帶來線程過載問題
2.NIO和普通IO的區別
傳統的Socket通信方式如下:
1)接收連接;
2)讀取請求消息,進行業務處理;
3)返回響應給客戶端
以上三種操作全部為同步阻塞,在業務量大的情況下,壹旦業務處理速度變慢,服務端返回給客戶端的響應將明顯下降,系統的吞吐量也嚴重下降。通常的做法是擴充服務端的線程,同時啟動多個監聽線程來並行處理客戶端的接入,但是這樣帶來的壹個副作用是線程數量將迅速增加,資源的損耗將進壹步加劇。
NIO通信的原理如下:NIO采用了Reactor模式(類似於觀察者模式,不同之處在於Reactor模式可以監聽多個主題),通過壹個多路復用器來監聽多個客戶端的網絡句柄,壹旦監聽到客戶端的請求消息,將對應的請求消息轉發給對應的Handler(業務處理類),讀和寫本身並不阻塞線程,如果沒有請求消息,多路復用器會阻塞在select()操作之上。