1. 程式人生 > >dubbo相關知識(四)-- Java中的BIO、NIO、AIO

dubbo相關知識(四)-- Java中的BIO、NIO、AIO

下面我們再來理解組合方式的IO型別,就好理解多了。 

同步阻塞IO(JAVA BIO): 
    同步並阻塞,伺服器實現模式為一個連線一個執行緒,即客戶端有連線請求時伺服器端就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷,當然可以通過執行緒池機制改善。 

同步非阻塞IO(Java NIO) : 同步非阻塞,伺服器實現模式為一個請求一個執行緒,即客戶端傳送的連線請求都會註冊到多路複用器上,多路複用器輪詢到連線有I/O請求時才啟動一個執行緒進行處理。使用者程序也需要時不時的詢問IO操作是否就緒,這就要求使用者程序不停的去詢問。 

非同步阻塞IO(Java NIO):  
   此種方式下是指應用發起一個IO操作以後,不等待核心IO操作的完成,等核心完成IO操作以後會通知應用程式,這其實就是同步和非同步最關鍵的區別,同步必須等待或者主動的去詢問IO是否完成,那麼為什麼說是阻塞的呢?因為此時是通過select系統呼叫來完成的,而select函式本身的實現方式是阻塞的,而採用select函式有個好處就是它可以同時監聽多個檔案控制代碼(如果從UNP的角度看,select屬於同步操作。因為select之後,程序還需要讀寫資料),從而提高系統的併發性!  



(Java AIO(NIO.2))非同步非阻塞IO:  
   在此種模式下,使用者程序只需要發起一個IO操作然後立即返回,等IO操作真正的完成以後,應用程式會得到IO操作完成的通知,此時使用者程序只需要對資料進行處理就好了,不需要進行實際的IO讀寫操作,因為真正的IO讀取或者寫入操作已經由核心完成了。    


BIO、NIO、AIO適用場景分析: 

    BIO方式適用於連線數目比較小且固定的架構,這種方式對伺服器資源要求比較高,併發侷限於應用中,JDK1.4以前的唯一選擇,但程式直觀簡單易理解。 

    NIO方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,併發侷限於應用中,程式設計比較複雜,
JDK1.4開始支援。 

    AIO方式使用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫OS參與併發操作,程式設計比較複雜,JDK7開始支援。 

相關推薦

dubbo相關知識-- JavaBIONIOAIO

下面我們再來理解組合方式的IO型別,就好理解多了。 同步阻塞IO(JAVA BIO):     同步並阻塞,伺服器實現模式為一個連線一個執行緒,即客戶端有連線請求時伺服器端就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷,當然可以通過執行緒池機制改善。 同步非阻塞IO(Java

dubbo相關知識-- java RMI框架

1、概述 在 Java 世界裡,有一種技術可以實現“跨虛擬機器”的呼叫,它就是 RMI(Remote Method Invocation,遠端方法呼叫),通過RMI技術,某一個本地的JVM可以呼叫存在於另外一個JVM中的物件方法,就好像它僅僅是在呼叫本地JVM中某個物件

Java多執行緒java的Sleep方法

點我跳過黑哥的卑鄙廣告行為,進入正文。 Java多執行緒系列更新中~   正式篇: Java多執行緒(一) 什麼是執行緒 Java多執行緒(二)關於多執行緒的CPU密集型和IO密集型這件事 Java多執行緒(三)如何建立執行緒 Java多執行緒(四)java中的Sleep方法  

Java多線程java的Sleep方法

start 線程的生命周期 cnblogs del 廣告 catch 創建 exceptio 分析 點我跳過黑哥的卑鄙廣告行為,進入正文。 Java多線程系列更新中~   正式篇: Java多線程(一) 什麽是線程 Java多線程(二)關於多線程的CPU密集型和IO密

Spring事務專題Spring事務的使用抽象機制及模擬Spring事務實現

Spring中事務的使用示例、屬性及使用中可能出現的問題 # 前言 本專題大綱如下: ![事務專題大綱](https://gitee.com/wx_cc347be696/blogImage/raw/master/image-20200808210340470.png) **對於專題大綱我又做了調整哈,

JavaBIONIOAIO使用樣例

上文中分析了阻塞,非阻塞,同步和非同步概念上的區別以及各種IO模型的操作流程,本篇文章將主要介紹Java中BIO,NIO和AIO三種IO模型如何使用。需要注意的是,本文中所提到的所有樣例都是在一個server對應一個client的情況下工作的,如果你想擴充套件為一個se

安全程式設計- Javathrow和throws的區別

1.粗淺來說         throw是一個語句丟擲異常,throws是一個方法丟擲異常;         throw不是和try-catch-finally配套使用就是和throws配套使用,而throws可

Java程式設計師從笨鳥到菜鳥之細談struts2struts2action執行流程和原始碼分析

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!                首先我們看一下struts官方給我們提供的struts執行流程從上面流程圖我們可以看出struts執行的流程大體分一下階段:1. 初始的請求通過一條標準的過濾器

Java基礎知識——面向物件

Java基礎知識(四)——面向物件(下) Java8的增強包裝類: 為了解決8種基本資料型別不能當成Object型別變數使用的問題。   JDK1.5提供了自動裝箱(Autoboxing)和自動拆箱·(AotuUnboxing)功能,所謂自動裝箱,就是可以把一個基本型別變數直接賦給對應的包裝

重新認識java ---- java的另類:static關鍵字附程式碼塊知識

你知道麼,static的用法至少有五種? 初識static static是“靜態”的意思,這個大家應該都清楚,靜態變數,靜態方法大家也都能隨口道來。但是,你真的理解靜態變數和靜態方法麼?除了這些static還有什麼用處? 事實上,static大

FPGA基礎知識鎖存器觸發器寄存器和緩沖器的區別

高端 指示器 領域 串行 方法 register 緩沖區 計算機 字節 一、鎖存器鎖存器(latch)---對脈沖電平敏感,在時鐘脈沖的電平作用下改變狀態鎖存器是電平觸發的存儲單元,數據存儲的動作取決於輸入時鐘(或者使能)信號的電平值,僅當鎖存器處於使能狀態時,輸出才會隨著

HBase概念學習Java API之掃描和過濾器

影響 產生 str 實例 分享 get 批量 java api track HBase主要的CRUD操作就不多介紹了,無非就是Put,Get。Delete三個類的運用。 本文相當於是閱讀HBase權威指南的總結。 一、掃描(Scan) 如今看一下掃

Maven的倉庫

setting back wid csdn esp strong itl nexus 知識 一、分類 maven的倉庫只有兩大類:   1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:   2.1 中央倉庫 2.2 私服 2.3

【Java_SSM】Eclipse通過maven引入jar包

osc ati eight wid -- stat ack ips 技術 這篇博文我們介紹一下如何通過eclipse配置setting並引入jar包 (1)eclipse:Window--Preferences--Maven--User Setting 全部完成

shell 相關知識1

shellshell自己的能力 寫腳本還行,起碼現在現網上跑的自己寫的腳本程序-日誌的 定時備份和刪除,nfs上海量文件刪除和發送郵件。【data】export PATH=/mall/jdk/jdk1.7/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/u

Python的“四大才子”字符串列表字典集合

不可 inf nbsp 創建 重新 指向 分享圖片 table 數據類型 前戲:在python中把數據序列分為可變(mutable)和不可變(immutable)兩種 不可變:string、int、float、tuple 特點

Java 關於String的空對象(null) ,空值(empty),空格

空值 ise als 內存 ati 調用 ext cor under 原文出處:Java 中關於String的空對象(null) ,空值(empty),空格 定義 空對象: String s = null; 空對象是指定義一個對象s,但是沒有給該對象分配空間,即沒有實例化

java 學習筆記 java連接ZooKeeper

事件 pre case 啟動 sync -m 服務 persist 刪除節點 public class Demo2 { public static void main(String[] args) { String connectString = "192.168.

類與接口java的接口與嵌套接口

strong span class .... 定義 成員 抽象 數列 多個 一、接口 1. 接口簡介 接口: 是java的一種抽象類型,是抽象方法的集合。接口比抽象類更加抽象的抽象類型。 接口語法: [修飾符] [abstract] interface 接口名 [exten

JavaSE學習總結——Java面向對象十分鐘入門

組織 table 運行時 order 3.1 project park 得到 row 目錄 一、理解類與對象及他們間的關系 1.1、對象 1.3、類與對象間的關系 二、了解面向對象編程的意義 三、定義類與實例化對象 3.1、定義類 3.2、實例化對象 四、區別