NIO是什麼?適用於何種場景?
- NIO與IO的最大區別就是:當讀取資料的時候,NIO讀取之後需要緩衝,是面向緩衝區的,而IO不需要緩衝,是面向流的。
- IO是阻塞的:就意味著當一個執行緒呼叫read()或write()時,該執行緒被阻塞,直到有一些資料被讀取,或資料完全寫入。該執行緒在此期間不會做任何事情。
- NIO的非阻塞模式,使一個執行緒從某通道傳送請求資料,但是它僅能得到目前可用的資料,如果沒有適用的資料,就不會讀取資料,而不是保持執行緒阻塞。執行緒通常將非阻塞IO的空閒時間用於在其他執行IO操作,所以一個單獨的執行緒可以管理多個輸入和輸出通道。
- java NIO選擇器允許一個單獨的執行緒來監視多個輸入通道。
NIO和IO如何影響應用程式的設計
-
API呼叫,NIO讀取資料時,必須先到快取中再做處理。
-
資料處理:
NIO處理資料:當資料全部到緩衝區時,就是當緩衝區滿時,才能處理資料,如何判斷快取區已經滿了呢?或者如何直到資料已經全部到達緩衝區了呢?我們需要判斷,需要掃面緩衝區。其實很多情況下,我們獲取部分資料就能開始處理,但是這樣的情況,阻礙了我們處理。
- 用來處理資料的執行緒數。NIO可以使用一個單獨的執行緒來管理多個通道,但付出的代價就是解析資料可能會比從一個阻塞流中讀取資料更復雜。如果需要管理成千上萬的連結,這些連線每次只是傳送少量的資料,例如聊天伺服器,實現NIO的伺服器可能是一個優勢。同樣,如果你需要維持許多開啟的連線到其他計算機上,如P2P網路中,使用一個單獨的執行緒來管理你所有出戰連線,可能時一個優勢。
- 如果你有少量的連線使用非常的寬頻,一次傳送大量的資料,也許典型的IO伺服器實現可能非常契合。
相關文章
- ClickHouse(01)什麼是ClickHouse,ClickHouse適用於什麼場景
- SID是什麼?用於什麼場景
- Spark適用於哪些場景?不適用於哪些場景?Spark
- HDFS 01 - HDFS是什麼?它的適用場景有哪些?它的架構是什麼?架構
- Java是什麼? Java適用於什麼工作?Java
- 什麼場景適合mongodbMongoDB
- Jtti:什麼是分散式伺服器?特點和適用場景分析Jtti分散式伺服器
- Git的reset和revert有什麼區別?它們分別適用於什麼場景?Git
- JS每日一題: 前端的快取有哪些?都適用什麼場景?區別是什麼?JS每日一題前端快取
- 什麼是svg?說說svg有什麼運用場景?SVG
- LoRa閘道器是什麼?有什麼應用場景?
- 什麼樣的代理適用於市場研究?
- Linux系統有哪些常用的網路命令,分別適用於什麼場景?Linux
- 什麼業務場景適合使用Redis?Redis
- 解釋下什麼是事件代理?應用場景?事件
- CDN適用哪些場景?
- 各種機器學習演算法的應用場景分別是什麼?機器學習演算法
- 【人工智慧】各種機器學習的應用場景分別是什麼?人工智慧機器學習
- 低程式碼適用於哪些應用開發場景
- 物件儲存適用於哪些場景?這5個場景皆可使用!物件
- 什麼場景應該用MongoDB ?MongoDB
- Streaming特性和適用場景
- 什麼是閉包?有哪些使用場景?優缺點是什麼?
- SSL代理是什麼?有哪些使用場景?
- NFC是什麼功能?有哪些使用場景?
- 解讀:在什麼業務場景適合使用Redis?Redis
- 你知道什麼是webAssembly嗎?它的運用場景有哪些?Web
- 各種分散式事務的實現方式適用的場景分散式
- 大資料之hadoop / hive / hbase 的區別是什麼?有什麼應用場景?大資料HadoopHive
- ::first-letter有什麼應用場景?
- 海外SSL代理是什麼?都有哪些使用場景?
- 面試官:Zookeeper是什麼,它有什麼特性與使用場景?面試
- 面試官:Kafka是什麼,它有什麼特性與使用場景?面試Kafka
- 面試官:ElasticSearch是什麼,它有什麼特性與使用場景?面試Elasticsearch
- 面試官:RocketMQ是什麼,它有什麼特性與使用場景?面試MQ
- DevOps是什麼?K8S在DevOps場景下的應用!devK8S
- 為什麼說儲存是區塊鏈最佳落地應用場景區塊鏈
- Kafka和RabbitMQ有哪些區別,各自適合什麼場景?KafkaMQ