成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說說高并發IO原理及模型,結果沒結果了

存儲 存儲軟件
read調用,并不是直接從物理磁盤讀取,同樣,write調用也不是直接把數據寫進物理磁盤,在他們中間還有一層,就是緩沖區,而緩沖區又包括:內核(kernel)緩沖區和用戶進程緩沖區。

 被虐前奏

面試官:說一下高并發IO底層原理?

面試者:呃。。。嗯。。。這個那個。。。我們都是用XX框架

結果:卒

理解一下高并發原理,展現真正的實力

[[324201]]

一、IO讀寫基礎原理

IO讀寫分為read和write兩塊,在不同的操作系統中,IO讀寫的底層調用可能有些區別,但基本功能是一樣的。read調用,并不是直接從物理磁盤讀取,同樣,write調用也不是直接把數據寫進物理磁盤,在他們中間還有一層,就是緩沖區,而緩沖區又包括:內核(kernel)緩沖區和用戶進程緩沖區。具體可以看下圖

 

面試官:說說高并發IO原理及模型,結果沒結果了

 

在Java中,完整的Socket請求和響應如下:

  • 客戶端調用:系統通過網卡讀取客戶端的請求,將數據讀取到內核緩沖區;
  • 程序請求數據:Java通過read命令,將數據從內核緩沖區送入Java的用戶緩沖區;
  • Java服務端數據處理:在Java用戶空間中處理客戶請求數據;
  • Java服務端返回數據:數據處理完,通過write命令,將構建好的響應數據從用戶緩沖區寫入內核緩沖區;
  • 發送數據到客戶端:內核通過網絡IO,將內核緩沖區中的數據通過網卡,適時將數據發送給目標客戶端。

二、四種常見的IO模型

1、同步阻塞IO(Blocking IO)

我們先了解一下概念:

同步與異步:同步指的是用戶空間是主動發起IO請求的一方,內核空間是被動接受的一方;異步則是將以上過程反過來;

阻塞與非阻塞:阻塞指的用戶空間發起請求后,需要等待內核空間徹底完成后,才將數據返回到用戶空間;非阻塞指的是用戶空間不需要等待內核空間操作完成,可以立即返回用戶用戶空間的過程 。

傳統的IO模型都是同步阻塞IO,在Java中,默認創建的socket都是同步阻塞的。Java應用從發起IO調用開始,直到系統調用返回,Java進程都是阻塞的,直到有數據返回成功后,應用程序才能開始處理用戶緩沖區的數據,具體流程如下:

 

面試官:說說高并發IO原理及模型,結果沒結果了

 

由上圖可以看出,每一步必須等待上一步的完成才能進行。

同步阻塞IO優點:開發簡單,容易入門;在阻塞等待期間,用戶線程掛起,在掛起期間不會占用CPU資源。

同步阻塞IO缺點:一個線程維護一個IO,不適合大并發,在并發量大的時候需要創建大量的線程來維護網絡連接,內存、線程開銷灰常大。

2、同步非阻塞IO(Non-blocking IO)

參考以上概念,當處于非阻塞IO時,用戶空間與內核空間可以更快的交互,只要拿到內核返回的狀態值,就可以繼續干自己的事情,而不用做無謂的等待。

在Java中,將socket的屬性設置為NONBLOCK即為非阻塞模式。在這個模式中,會有以下兩種情況:

在內核緩沖區沒有數據時,系統調用會馬上返回失敗狀態給調用方;

在內核緩沖區有數據時,此時是會阻塞的,直到數據從內核緩沖區復制到用戶緩沖區,復制完成后,系統調用返回成功,繼而用戶的應用進程開始處理用戶空間的數據,具體流程如下:

 

面試官:說說高并發IO原理及模型,結果沒結果了

 

由上圖可以看出,在內核還沒有準備好數據的時候,用戶線程發起IO請求,會立即返回;為了最終讀取到數據,用戶線程需要不斷發起IO調用;歷經多次探險后,終于有數據到達內核時,此時,用戶線程會進入阻塞狀態,當數據成功復制到用戶緩沖區,用戶線程成功讀取到數據后,才會解除阻塞狀態,重新運行起來。

同步非阻塞IO優點:每次發起IO調用,在內核等待數據的過程中可以立即返回,用戶線程不會阻塞,實時性較好。

同步非阻塞IO缺點:多個線程不斷輪詢內核是否有數據,占用大量CPU時間,效率不高。一般Web服務器不會采用此模式。

3、IO多路復用(IO Multiplexing)

如何解決同步非阻塞IO輪詢造成效率低下的問題,這時IO多路復用出現了。

經典的Reactor反應器設計模式,也可稱為異步阻塞IO,是眾多高性能高并發服務器的基礎,比如Nginx、Netty、Redis等。Java中NIO(New IO)里的Selector選擇器也是基于此模式。在Linux系統中,對應的系統調用為select/epoll系統調用,當內核緩沖區可讀或者可寫時,內核將就緒的狀態主動通知相應的用戶程序,應用程序收到就緒狀態,進行相應的IO調用,具體流程如下:

 

面試官:說說高并發IO原理及模型,結果沒結果了

 

由上圖可以看出,該模式下,read操作流程如下:

  • 注冊選擇器,將read操作的目標socket提前注冊到select/epol選擇器中(類比Java中NIO的selector);
  • 輪詢,通過選擇器的查詢方法,查詢注冊過的所有socket連接的就緒狀態,內核個就緒的socket列表(當內核監控到注冊過的socket有數據準備好了,就會將該socket加入到就緒列表)。注意,當用戶調用select查詢方法時,此時整個線程會處于阻塞狀態;
  • 用戶線程獲取到就緒列表后,根據其中的socket連接,發起read請求,用戶線程阻塞,內核開始復制數據,將數據從內核緩沖區復制到用戶緩沖區;
  • 復制完成后,內核返回結果,用戶線程才會解除阻塞,待用戶線程讀取成功數據后,線程繼續。

IO多路復用優點:系統不必創建維護大量線程,只使用一個線程,一個選擇器即可同時處理成千上萬個連接,大大減少了系統開銷。

IO多路復用缺點:本質上,select/epoll系統調用是阻塞式的,屬于同步IO,需要在讀寫事件就緒后,由系統調用進行阻塞的讀寫。

4、異步IO(Asynchronous IO)

異步IO,指的是用戶空間與內核空間的調用方式返過來。內核空間是主動調用者,用戶空間變成被動接收者。用戶空間的線程向內核空間注冊各種IO事件的回調函數,由內核主動觸發調用。

AIO的基本流程是:用戶線程通過系統調用,向內核注冊某個IO操作。在整個內核的數據處理中, 包括數據從網卡到內核緩沖區,內核緩沖區到用戶緩沖區,用戶程序都不需要阻塞。具體流程如下:

 

面試官:說說高并發IO原理及模型,結果沒結果了

 

由上圖可以看出,該模式下,在內核等待數據和復制數據的兩個階段,用戶線程都不會阻塞。read操作流程如下:

  • 用戶發起read請求,內核立刻返回成功狀態,用戶不會阻塞,可以馬上去做其它事情;
  • 內核開始準備數據,待數據準備好了,內核會主動將數據從內核緩沖區復制到用戶緩沖區;
  • 此時,內核會給用戶線程發送一個信號,或者回調用戶線程注冊的回調接口,通知用戶read操作完成了;
  • 用戶線程收到通知后,讀取用戶緩沖區的數據,完成后續業務。

異步IO優點:真正實現了異步非阻塞,吞吐量在這幾種模式中是最高的。

異步IO缺點:應用程序只需要進行事件的注冊與接收,其余工作都交給了操作系統內核,所以需要內核提供支持。在Linux系統中,異步IO在其2.6才引入,目前也還不是灰常完善,其底層實現仍使用epoll,與IO多路復用相同,因此在性能上沒有明顯占優。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2024-01-10 08:01:55

高并發場景悲觀鎖

2021-07-01 07:34:09

LinuxIO模型

2020-04-10 08:03:04

分布式鎖Redlock算法流行算法

2020-05-19 13:18:45

網頁前端Web

2018-12-18 14:08:01

Java內存volatile

2025-01-03 09:36:22

Nginx高并發進程

2018-03-01 15:13:42

Ryzen APU內存通道

2025-01-09 10:54:27

2011-08-30 10:22:14

MongoDB

2020-09-02 07:05:56

手機支付

2020-09-22 12:00:23

Javahashmap高并發

2025-06-30 00:00:00

2019-05-27 08:11:13

高并發Synchronize底層

2009-10-13 14:50:19

C#中b=a

2010-01-14 10:52:13

VB.NET水晶報表

2019-06-28 10:55:04

預熱高并發并發高

2020-04-13 08:33:39

高并發秒殺系統

2024-06-20 08:06:51

2024-07-16 18:05:19

延遲隊列MQRabbitMQ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费看片 | 成人在线精品 | 亚洲国产一区二区三区在线观看 | 亚洲精品一区二区在线观看 | 午夜资源| 国产免费一区二区 | 国产一区二区三区在线看 | 欧美日韩精品中文字幕 | 免费高潮视频95在线观看网站 | 亚洲成网站 | 中文字幕视频在线 | 毛片a区 | 日韩精品在线播放 | 久久午夜国产精品www忘忧草 | 亚洲 中文 欧美 日韩 在线观看 | 欧美精品区 | 伊人免费网 | 一本岛道一二三不卡区 | 欧美另类视频 | 欧美日韩国产高清视频 | 国产羞羞视频在线观看 | 男女羞羞免费网站 | 亚洲永久 | 在线中文字幕av | 99日韩| 羞羞的视频网站 | 亚洲精品在线国产 | 日韩精品在线一区 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 中文字幕久久精品 | 欧美二级 | 一区二区三区四区不卡视频 | 喷潮网站 | 亚洲精品国产电影 | 成人在线网 | 国产精品久久久久久久久久三级 | 人成精品 | 国产亚洲欧美在线 | 免费九九视频 | av在线一区二区 | 午夜三区|