打比方理解 NIO 中的角色

2021-09-02 12:41:16 字數 533 閱讀 6464

打比方理解 nio 中的角色

channel 通道

buffer 緩衝區

selector 選擇器

其中channel對應以前的流,buffer不是什麼新東西,selector是因為nio可以使用非同步的非堵塞模式才加入的東西。

以前的流總是堵塞的,乙個執行緒只要對它進行操作,其它操作就會被堵塞,也就相當於水管沒有閥門,你伸手接水的時候,不管水到了沒有,你就都只能耗在接水(流)上。

nio的channel的加入,相當於增加了水龍頭(有閥門),雖然乙個時刻也只能接乙個水管的水,但依賴輪換策略,在水量不大的時候,各個水管裡流出來的水,都可以得到妥善接納,這個關鍵之處就是增加了乙個接水工,也就是selector,他負責協調,也就是看哪根水管有水了的話,在當前水管的水接到一定程度的時候,就切換一下:臨時關上當前水龍頭,試著開啟另乙個水龍頭(看看有沒有水)。

當其他人需要用水的時候,不是直接去接水,而是事前提了乙個水桶給接水工,這個水桶就是buffer。也就是,其他人雖然也可能要等,但不會在現場等,而是回家等,可以做其它事去,水接滿了,接水工會通知他們。