BIO、NIO、AIO
NIO vs IO之間的理念上面的區別(NIO將阻塞交給了後臺線程執行)
- IO是面向流的,NIO是面向緩衝區的
- Java IO面向流意味着每次從流中讀一個或多個字節,直至讀取所有字節,它們沒有被緩存在任何地方;
- NIO則能前後移動流中的數據,因爲是面向緩衝區的
- IO流是阻塞的,NIO流是不阻塞的
- Java IO的各種流是阻塞的。這意味着,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數據被讀取,或數據完全寫入。該線程在此期間不能再幹任何事情了
- Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,但是它僅能得到目前可用的數據,如果目前沒有數據可用時,就什麼都不會獲取。NIO可讓您只使用一個(或幾個)單線程管理多個通道(網絡連接或文件),但付出的代價是解析數據可能會比從一個阻塞流中讀取數據更復雜。
- 非阻塞寫也是如此。一個線程請求寫入一些數據到某通道,但不需要等待它完全寫入,這個線程同時可以去做別的事情。
- 選擇器
- Java NIO的選擇器允許一個單獨的線程來監視多個輸入通道,你可以註冊多個通道使用一個選擇器,然後使用一個單獨的線程來“選擇”通道:這些通道里已經有可以處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。
參考:https://blog.csdn.net/evan_man/article/details/50910542
- Java NIO的選擇器允許一個單獨的線程來監視多個輸入通道,你可以註冊多個通道使用一個選擇器,然後使用一個單獨的線程來“選擇”通道:這些通道里已經有可以處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。
NIO通信框架有Mina、Netty、Grizzly
https://blog.csdn.net/wang_snake/article/details/79249972
BIO、NIO、AIO區別
https://blog.csdn.net/guanghuichenshao/article/details/79375967
網絡編程
https://h2pl.github.io/categories/後端/Java網絡編程與NIO/page/2/