Java進階(10) - 網絡編程

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

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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章