日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

内核aio_今天来说说令人让人傻傻分不清的BIO,NIO,AIO

發(fā)布時間:2024/4/13 ChatGpt 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核aio_今天来说说令人让人傻傻分不清的BIO,NIO,AIO 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • | 作者:新一、
  • | 簡書:https://www.jianshu.com/u/b3263fc54bce
  • | 知乎:https://www.zhihu.com/people/qing-ni-chi-you-zi-96
  • | GitHub:https://github.com/JangYt?tab=repositories
  • | 博客地址:https://blog.csdn.net/qq_41153943

一、概念

Java 中的 BIO、NIO和 AIO 理解為是 Java 語言對操作系統(tǒng)的各種 IO 模型的封裝。程序員在使用這些 API 的時候,不需要關(guān)心操作系統(tǒng)層面的知識,也不需要根據(jù)不同操作系統(tǒng)編寫不同的代碼。只需要使用Java的API就可以了。在講 BIO,NIO,AIO 之前先來回顧一下這樣幾個概念:同步與異步,阻塞與非阻塞。并且它們又可以排列組合成:同步阻塞、同步非阻塞、異步阻塞、異步非阻塞。

1、同步:指的是用戶進程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否就緒。比如肚子餓了去飯店吃飯,點好菜后一直問老板,飯好了沒有。

2、異步:異步指的是用戶進程觸發(fā)IO操作以后可以去做自己的事情,而當IO操作已經(jīng)完成的時候會得到IO完成的通知,異步的特點就是通知。使用異步IO時,Java將IO讀寫委托給OS處理,需要將數(shù)據(jù)緩沖區(qū)地址和大小傳給OS。

對于通知調(diào)用者的三種方式,具體如下:

狀態(tài):即監(jiān)聽被調(diào)用者的狀態(tài)(輪詢),調(diào)用者需要每隔一定時間檢查一次,效率會很低。

通知:當被調(diào)用者執(zhí)行完成后,發(fā)出通知告知調(diào)用者,無需消耗太多性能。

回調(diào):與通知類似,當被調(diào)用者執(zhí)行完成后,會調(diào)用調(diào)用者提供的回調(diào)函數(shù)。

總結(jié)來說,同步和異步的區(qū)別:請求發(fā)出后,是否需要等待結(jié)果,才能繼續(xù)執(zhí)行其他操作。

3、阻塞:所謂阻塞方式的意思是指, 當試圖對該文件描述符進行讀寫時, 如果當時沒有東西可讀,或者暫時不可寫, 程序就進入等待狀態(tài), 直到有東西可讀或者可寫為止。比如我們?nèi)コ燥埖臅r候,飯一直沒好,那我們就處于阻塞的狀態(tài)了。

4、非阻塞:非阻塞狀態(tài)下, 如果沒有東西可讀, 或者不可寫, 讀寫函數(shù)馬上返回,而不會一直等待。比如我們吃飯的時候如果飯沒來的時候,我們可以打打游戲,看看電視,等著飯好,而不用一直傻傻的干等著。

所以:1、同步和異步是針對應用程序和內(nèi)核的交互而言的。2、阻塞和非阻塞是針對于進程在訪問數(shù)據(jù)的時候,根據(jù)IO操作的就緒狀態(tài)來采取的不同方式,說白了是一種讀取或者寫入操作函數(shù)的實現(xiàn)方式,阻塞方式下讀取或者寫入函數(shù)將一直等待,而非阻塞方式下,讀取或者寫入函數(shù)會立即返回一個狀態(tài)值。 即同步和異步是目的,而阻塞和非阻塞是實現(xiàn)方式。一個IO操作其實分成了兩個步驟:發(fā)起IO請求和實際的IO操作。

而對于同步IO和異步IO的區(qū)別就在于實際的IO操作是否阻塞,如果實際的IO操作阻塞請求進程,那么就是同步IO。

同步和異步是針對應用程序和內(nèi)核的交互而言的,同步指的是用戶進程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否就緒,而異步是指用戶進程觸發(fā)IO操作以后便開始做自己的事情,而當IO操作已經(jīng)完成的時候會得到IO完成的通知。

而阻塞IO和非阻塞IO的區(qū)別就在于發(fā)起IO請求是否會被阻塞,如果阻塞直到完成那么就是阻塞IO,如果不阻塞,那么就是非阻塞IO。

阻塞和非阻塞是針對于進程在訪問數(shù)據(jù)的時候,根據(jù)IO操作的就緒狀態(tài)來采取的不同方式,說白了是一種讀取或者寫入操作函數(shù)的實現(xiàn)方式,阻塞方式下讀取或者寫入函數(shù)將一直等待,而非阻塞方式下,讀取或者寫入函數(shù)會立即返回一個狀態(tài)值。

所以,IO操作可以分為3類即我們這里要說的:BIO(Blocked IO:同步阻塞)、NIO(Non-Blocked IO:同步非阻塞)、AIO(Asynchronous IO:異步非阻塞)。

Java BIO (blocking IO):同步并阻塞,在JDK1.4出來之前,我們建立網(wǎng)絡連接的時候采用BIO模式,需要先在服務端啟動一個ServerSocket,然后在客戶端啟動Socket來對服務端進行通信,默認情況下服務端需要對每個請求建立一堆線程等待請求,而客戶端發(fā)送請求后,先咨詢服務端是否有線程相應,如果沒有則會一直等待或者遭到拒絕請求,如果有的話,客戶端會線程會等待請求結(jié)束后才繼續(xù)執(zhí)行。所以如果這個連接不做任何事情會造成不必要的線程開銷,不過可以通過線程池機制改善。

Java NIO (non-blocking IO):同步非阻塞,服務器實現(xiàn)模式為一個請求一個線程,即客戶端發(fā)送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。

Java AIO(NIO.2) (Asynchronous IO) :異步非阻塞,服務器實現(xiàn)模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理。

另外還有一種異步阻塞IO,即經(jīng)典的Reactor設計模式,叫的更多的其實是IO多路復用(IO Multiplexing)。多路復用是指使用一個線程來檢查多個文件描述符(Socket)的就緒狀態(tài),比如調(diào)用select和poll函數(shù),傳入多個文件描述符,如果有一個文件描述符就緒,則返回,否則阻塞直到超時。得到就緒狀態(tài)后進行真正的操作可以在同一個線程里執(zhí)行,也可以啟動線程執(zhí)行(比如使用線程池)。這樣在處理過多的連接時,只需要1個線程監(jiān)控就緒狀態(tài),對就緒的每個連接開一個線程處理就可以了,這樣需要的線程數(shù)大大減少,減少了內(nèi)存開銷和上下文切換的CPU開銷。

舉個栗子:

我們在夜市買小吃的時候就經(jīng)常有這樣的場景:比如我們在臭豆腐攤子那里點了份臭豆腐,但是人比較多,所以我們得排隊,輪到我們才能拿到臭豆腐,這個就是同步阻塞;但是有時候我們可以在臭豆腐這個點一份臭豆腐,然后跟老板說再去買份蛋炒飯過會過來拿,但是又不知道什么時候能好,畢竟臭豆腐熱乎的好吃啊,所以在等蛋炒飯的時候就過幾分鐘就去看看臭豆腐好了沒有,這種在炒飯攤和臭豆腐攤直接來回跑的就是同步非阻塞;還有一種就是我們已經(jīng)是臭豆腐攤的老顧客了就跟老板說要一份臭豆腐,先去買蛋炒飯,臭豆腐好了打電話再過去拿,這就是異步阻塞;還有一種情況就是跟老板關(guān)系太好了,老板說你去買蛋炒飯吧,等臭豆腐好了我給你送過去,這個就是異步非阻塞了。

二、應用場景

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

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對服務器資源要求比較高,并發(fā)局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務器,并發(fā)局限于應用中,編程比較復雜,JDK1.4開始支持。AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),比如相冊服務器,充分調(diào)用OS參與并發(fā)操作,編程比較復雜,JDK7開始支持。

三、結(jié)尾

這里只是簡單的從概念和應用層面對java中的BIO、NIO、AIO進行解釋和分析,其實這里背后的原理涉及到了很多的底層的概念,比如網(wǎng)絡、操作系統(tǒng)等等,這里篇幅有限就不再過分展開說明,后面再細分進行展開,本文首發(fā)于gzh【1024筆記】,有興趣的可以移步gzh獲取海量資料。

總結(jié)

以上是生活随笔為你收集整理的内核aio_今天来说说令人让人傻傻分不清的BIO,NIO,AIO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美久久久一区二区三区 | 黑人性高潮 | 成人激情免费 | 无码人妻精品一区二区蜜桃视频 | 2017日日夜夜 | 自拍愉拍| 69av网站 | 91原创视频在线观看 | 国产不卡在线播放 | 国产四区 | 超碰蜜臀 | 91高清网站 | h视频在线免费观看 | 97久久国产亚洲精品超碰热 | 国产精品99久久久久久人 | 国产毛片毛片毛片毛片毛片 | 天堂在线观看免费视频 | 亚洲精品免费在线观看 | 精品不卡在线 | 亚洲一区观看 | 清清草视频 | 另类小说五月天 | 偷拍视频一区 | 精品久久久中文字幕 | 噜噜噜久久| 五月婷婷色 | 亚洲一区在线电影 | 日韩av在线第一页 | 疯狂做受xxxx国产 | 清纯唯美亚洲色图 | 久久久一区二区三区 | 亚洲成年 | 日韩av无码久久 | 熟女少妇一区二区三区 | 樱桃视频一区二区三区 | 久久久精品人妻无码专区 | av电影在线观看不卡 | 少妇影院在线观看 | 久久久久九九九九 | 蜜桃成熟时李丽珍在线观看 | 天天草影院| 日韩一区二区不卡视频 | 成人性生交大片免费看r链接 | 中文字幕在线观看视频www | 国产精品无码AV无码国产 | 无码一区二区三区 | 老熟妇仑乱视频一区二区 | 亚洲欧美强伦一区二区 | 国产噜噜噜噜噜久久久久久久久 | 国产精品视频一二区 | 欧美黄视频在线观看 | 国产精品无码人妻一区二区在线 | 中文字幕在线观看高清 | 久久99精品视频 | 91网址在线 | 精品自拍av | 名校风暴在线观看免费高清完整 | 裸体女人a级一片 | 国产精品成人3p一区二区三区 | 无码人妻h动漫 | 欧亚一级片| 亚洲欧美偷拍一区 | 我要看黄色大片 | 在线免费观看污网站 | 青青草原成人 | 丝袜制服一区 | 精品美女一区二区 | 久久综合激的五月天 | 国产精品成人av久久 | 韩国成年人网站 | 午夜成人鲁丝片午夜精品 | 在线麻豆视频 | 欧美青草视频 | 亚洲国产中文字幕 | 激情视频一区二区三区 | 超碰网址| av免费在线播放 | 久久国产色av免费观看 | 国产一级免费 | 日本一级黄色录像 | 欧美日韩免费在线观看 | 少妇名器的沉沦 | 极品videosvideo喷水| 深夜福利免费观看 | 欧美大片免费观看 | 狠狠干夜夜草 | 亚洲伦理在线 | 污污视频在线观看免费 | 夫妻毛片 | 越南性xxxx精品hd | 性按摩玩人妻hd中文字幕 | 国产精品99久久久久久www | 国产在线喷水 | 国产综合网站 | 亚洲深夜在线 | 69影院少妇在线观看 | 一级在线播放 | 美女黄色录像 | 国产欧美久久久精品免费 |