NIO是什麼?適用於何種場景?

程式猿新手_曹先生發表於2020-12-06
  • NIO與IO的最大區別就是:當讀取資料的時候,NIO讀取之後需要緩衝,是面向緩衝區的,而IO不需要緩衝,是面向流的。
  • IO是阻塞的:就意味著當一個執行緒呼叫read()或write()時,該執行緒被阻塞,直到有一些資料被讀取,或資料完全寫入。該執行緒在此期間不會做任何事情。
  • NIO的非阻塞模式,使一個執行緒從某通道傳送請求資料,但是它僅能得到目前可用的資料,如果沒有適用的資料,就不會讀取資料,而不是保持執行緒阻塞。執行緒通常將非阻塞IO的空閒時間用於在其他執行IO操作,所以一個單獨的執行緒可以管理多個輸入和輸出通道。
  • java NIO選擇器允許一個單獨的執行緒來監視多個輸入通道。

NIO和IO如何影響應用程式的設計

  • API呼叫,NIO讀取資料時,必須先到快取中再做處理。

  • 資料處理:

NIO處理資料:當資料全部到緩衝區時,就是當緩衝區滿時,才能處理資料,如何判斷快取區已經滿了呢?或者如何直到資料已經全部到達緩衝區了呢?我們需要判斷,需要掃面緩衝區。其實很多情況下,我們獲取部分資料就能開始處理,但是這樣的情況,阻礙了我們處理。

  • 用來處理資料的執行緒數。NIO可以使用一個單獨的執行緒來管理多個通道,但付出的代價就是解析資料可能會比從一個阻塞流中讀取資料更復雜。如果需要管理成千上萬的連結,這些連線每次只是傳送少量的資料,例如聊天伺服器,實現NIO的伺服器可能是一個優勢。同樣,如果你需要維持許多開啟的連線到其他計算機上,如P2P網路中,使用一個單獨的執行緒來管理你所有出戰連線,可能時一個優勢。
  • 如果你有少量的連線使用非常的寬頻,一次傳送大量的資料,也許典型的IO伺服器實現可能非常契合。

相關文章