java當中的nio框架(java nio的使用場景)

本文目錄一覽:

有人能說清楚JAVA7 NIO NETTY IOCP之間的聯繫嗎

早期網路訪問的做法是,連接以後,就等待對方應答,對方沒有應答,代碼就會死在那裡。這稱為阻塞式通訊。

後來,java 1.4 開始引入了nio, nio是非阻塞式網路通訊. 其實可以理解為系統去掃描埠,如果有返回就處理,沒有的話,代碼就繼續做別的事。

不過nio的編碼比較麻煩,雖然性能好,可是很多代碼還在用阻塞,因為代碼簡單,很多例子上也是socket的。

然後高麗人開發了apache的mina,可以快速開發nio。

後來高麗人離開apache,開發了netty,提供了另一種調用nio的framework。

現在mina和netty是最常用的nio框架。

至於iocp,這個是個系統級的實現,其實類似nio,不過是通過操作系統來實現的。而且只支持windows。java 7以後把iocp引入,提供了快速開發的介面。不過不是很推薦使用。系統實現就表示iocp不再是跨平台的。那麼實用性就差很多了。

為什麼說Java NIO 是非阻塞的

NIO之前的IO流要實現非阻塞得用戶程序創建線程實現,每個線程內部用阻塞判斷IO中斷.而線程太佔資源.不適用於IO高並發.為解決線程太佔資源問題還提供了線程池框架.但也沒完全解決IO高並發問題.

NIO框架則採取用戶程序將IO需求註冊入NIO框架,NIO框架用單線程循環查詢全部IO需求,並分派響應IO需求.這樣的好處是減少了高並發時的線程切換.用戶程序編程上看沒有阻塞的方法調用.

java nio 伺服器架構有哪些

1,一個小的線程池負責dispatch NIO事件。

2,註冊事件,即操作selecter時,要使用一個同步鎖(即Architecture of a Highly Scalable NIO-Based Server一文中的guard對象),即對同一個selector的操作是互斥的。

3,這個小的線程池不處理邏輯業務,大小可以是Runtime.getRuntime().availableProcessors() + 1,即你系統有效CPU個數+1。這是因為我們假設有一個線程專門處理accept事件,

而其他線程處理read/write操作。

java裡面的NIO是什麼,有什麼用?

NIO即New IO,這個庫是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但實現方式不同,NIO主要用到的是塊,所以NIO的效率要比IO高很多。

在Java API中提供了兩套NIO,一套是針對標準輸入輸出NIO,另一套就是網路編程NIO。

java 提供了哪些IO方式

Java IO 方式有很多種,基於不同的 IO 抽象模型和交互方式,可以進行簡單區分。

首先,傳統的 java.io 包,它基於流模型實現,提供了我們最熟知的一些 IO 功能,比如 File 抽象、輸入輸出流等。交互方式是同步、阻塞的方式,也就是說,在讀取輸入流或者寫入輸出流時,在讀、寫動作完成之前,線程會一直阻塞在那裡,它們之間的調用是可靠的線性順序。

java.io 包的好處是代碼比較簡單、直觀,缺點則是 IO 效率和擴展性存在局限性,容易成為應用性能的瓶頸。

很多時候,人們也把 java.net 下面提供的部分網路 API,比如 Socket、ServerSocket、HttpURLConnection 也歸類到同步阻塞 IO 類庫,因為網路通信同樣是 IO 行為。

第二,在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以構建多路復用的、同步非阻塞 IO 程序,同時提供了更接近操作系統底層的高性能數據操作方式。

第三,在 Java 7 中,NIO 有了進一步的改進,也就是 NIO 2,引入了非同步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。非同步 IO 操作基於事件和回調機制,可以簡單理解為,應用操作直接返回,而不會阻塞在那裡,當後台處理完成,操作系統會通知相應線程進行後續工作。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/270257.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:36
下一篇 2024-12-16 13:36

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • Unity3D 創建沒有 Terrain Tile 的場景

    這篇文章將會介紹如何在 Unity3D 中創建一個沒有 Terrain Tile 的場景,同時也讓讀者了解如何通過編程實現這個功能。 一、基礎概念 在 Unity3D 中,Terr…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29

發表回復

登錄後才能評論