精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

阿里Java二面:從底層聊下IO多路復用模型?這不有嘴就會

開發 前端
當我們去面試的時候,問到了 redis,nginx,netty他們的底層模型分別是什么?redis -> epoll,nginx-> epoll,netty-> epoll?

前言

當我們去面試的時候,問到了 redis,nginx,netty他們的底層模型分別是什么?

  • redis -> epoll
  • nginx-> epoll
  • netty-> epoll?

需要從操作系統的層面上來談

BIO

當我們開機的時候,首先被加載進內存的是我們的Kernel(內核),內核是用于管理我們的硬件的,同時內核還會創建一個GDT表,然后劃分兩個空間(用戶空間和內核空間),同時空間中的內容是開啟了保護模式,無法被修改的。

同時還有一個CPU的概念,CPU有自己的指令集,并且指令集是分了幾個級別的,分別是從0~3的,Kernel屬于0級別。APP只能用級別為3的指令集。

從上面我們可以知道,我們的應用程序是無法直接訪問我們的Kernel的,也就是程序不能直接訪問我們的磁盤,聲卡,網卡等設備,只有內核才可以訪問,那我們怎么辦?

只有APP通過調用Kernel提供的 syscall(系統軟中斷和硬中斷)來獲取硬件中的內容。

軟中斷

硬中斷:硬中斷指的是我們的鍵盤,按下一個按鍵的時候,就會觸發我們的硬中斷,也就是內核會有一個中斷號,然后得到一個callback的回調函數

說到這里,其實就是為了引出一個 概念,就是 IO 和 內核之間的成本問題

  1. /** 
  2.  * 服務器讀取文件 
  3.  * @author: 陌溪 
  4.  * @create: 2020-07-01-20:40 
  5.  */ 
  6. public class TestSocket { 
  7.     public static void main(String[] args) throws IOException { 
  8.         ServerSocket server = new ServerSocket(8090); 
  9.         System.out.println("step1: new ServerSocket(8090)"); 
  10.         while(true) { 
  11.             Socket client = server.accept(); 
  12.             System.out.println("step2: client " + client.getPort()); 
  13.             new Thread(() -> { 
  14.                 try { 
  15.                     InputStream in = client.getInputStream(); 
  16.                     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
  17.                     while(true) { 
  18.                         System.out.println(reader.readLine()); 
  19.                     } 
  20.                 } catch (IOException e) { 
  21.                     e.printStackTrace(); 
  22.                 } 
  23.             }, "t1").start(); 
  24.         } 
  25.     } 

抓取程序對內核有沒有系統調用,然后輸出

  1. strace -ff -o ./ooxx java TestSocket 

然后我們執行上面的程序,得到我們的結果

然后我們在通過jps命令,查看當前TestSocket的進程號

 

  1. jps  
  2. 2912 Jps  
  3. 2878 TestSocket 

然后我們在進入下面的這個目錄下,啟動2878是線程的id號,這個目錄就是存放該線程的一些信息

  1. cd /proc/2878 

我們可以看到2878進程下的,通過查看task目錄,可以看到所有線程數

還有一個目錄,就是 fd目錄,在該目錄下,就是我們的一些IO流

上面的0,1,2,分別對應著 輸入流,輸出流和錯誤流。在java里面我們流就是對象,而在linux系統中,流就是一個個的文件。后面的4,5 就對應著我們的socket通信,分別對應著ipv4 和 ipv6

通過netstat命令查看

然后我們使用nc連接 8090端口

  1. nc localhost 8090 

我們執行完后,通過netstat命令查看 ,發現多了個連接的狀態

然后在看文件里面,也多了一個socket

我們查看系統調用,發現通過系統調用接收了一個58181端口號的請求,在前面我們還能夠看到5,這個5其實就是對應的上圖里面的socket,走的是ipv4。

從這里其實我們就可以知道了,我們原來調用中寫的代碼

  1. Socket client = server.accept(); 

對應到系統層面,也是調用了系統的方法。

同時關于系統調用,有以下幾種方式

  • bind
  • connect
  • listen
  • select
  • socket

首先我們需要知道,java其實是一種解釋型語言,通過JVM 虛擬機將我們的.java文件轉換為字節碼文件,然后調用我們os中的syscall方法,我們必須明確的是,無論怎么調用,一定最后要通過調用內核的方法,然后調用我們的硬件。

上述的模型,就是BIO的通信,是這里面有很多阻塞,我們只能夠通過多個線程來避免主線程的阻塞。但是從上面我們可以知道,如果有大量地連接過來,那服務器需要創建很多個線程與之對應,并且線程的創建也是需要消耗資源的,因為線程使用的棧是獨占的(棧大小默認1MB),同時CPU的資源調度也是需要浪費。

最根本的原因就是因為 BIO是阻塞的,才會造成上面的問題。

NIO

因為BIO存在線程阻塞的問題,后面就提出了NIO的概念,在NIO中,有C10K的問題,C10K = 10000個客戶端。但是在和你連接的服務器中,其實沒有多少給你發送數據了,所以我們需要做的就是,每當有人發送消息的時候,我才和它進行連接。

也就是每次都需要遍歷10000個客戶端,是非常耗費時間呢,因為很多客戶端可能就沒有請求的發送。

多路復用

這個時候,我們就不需要遍歷10K個客戶端了,而是把我們的fds文件發送給內核,然后內核去判斷最后需要連接誒的客戶端,這樣就不用遍歷全部的了。所以這里的Select就是多路復用器,通過多路復用返回的是狀態,然后我們需要程序去判斷這些狀態。

說白了,就是通過一個多路復用器,來判斷哪些路可以走通,然后不需要輪詢全部的。

 

這個模型,是通過select,將fds文件交給內核來做了,也就是內核需要完成10K個文件的主動遍歷,這個10K個調用,對比之前的10K次系統調用來說,是更省時間的,存在以下的問題

  • 每次傳遞很多數據(重復勞動)
  • 然后內核需要主動去遍歷( 復雜度O(N) )

解決方法,通過在內核中,開辟一個空間,當每次來一個客戶端,就把這個文件丟到內核中,這樣不需要每次把10K個文件傳遞到內核了。然后在使用一個基于事件驅動的模型,如下圖所示就是一個異步事件驅動的流程

同樣使用epoll,Redis是輪詢,Nginx是阻塞?

我們通過strace命令,查看nginx 和 redis的運行流程,能夠發現 同樣是使用了 epoll,但是nginx是阻塞的,而redis它是輪詢(非阻塞)的。

首先那是因為Redis只有一個線程,而這個線程要做很多事情,例如 接收客戶端,LRU,LFU(淘汰過濾)、RDB/AOF(fork線程進行數據備份)。

也就是說對于Redis中的C10K問題,redis也是通過epoll的事件驅動來進行處理的,也就是通過epoll將每個需要讀取的客戶端的操作放在一個原子串行化的隊列中,并且一個客戶端包含以下的幾個操作:read、計算、write等

在redis 6.X版本中,還有一個IO threads的概念,首先它為了留住串行化原子性的特點,也就是計算的時候還是串行化的處理,但是在讀取數據的時候,使用的是多線程進行并發IO讀取。為什么要多線程讀呢?首先因為讀操作需要發生CPU的系統調用,如果通過多個線程讀取,能夠充分發揮CPU的多核作用

而nginx只需要做一件事,就是等著客戶端過來,不需要做其他的事情,所以也就設置成阻塞。

零拷貝

用kafka來講,首先這里面有兩個角色,一個是消息生產者,一個是消息消費者

也就是說,我們通過開辟了一個內存空間,能夠直接抵達磁盤,能夠減少kernel的系統調用。在讀取的時候,如果是原來的做法,就需要首先請求kernel,然后kernel發起一個read請求,讀取磁盤的文件到內核中,然后kafka在讀取kernel中的信息。

那么什么是零拷貝呢?

零拷貝就是不發生拷貝的情況,零拷貝的前提就是數據不需要加工,在JVM中有一個RandomAccessFile,它能夠直接開辟一個堆內空間,或者堆外空間。

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

2023-01-09 10:04:47

IO多路復用模型

2025-06-06 00:33:00

2020-10-13 07:51:03

五種IO模型

2020-10-14 09:11:44

IO 多路復用實現機

2021-05-31 06:50:47

SelectPoll系統

2024-08-08 14:57:32

2023-11-07 08:19:35

IO多路復用磁盤、

2022-08-26 00:21:44

IO模型線程

2023-12-13 09:45:49

模型程序

2022-09-12 06:33:15

Select多路復用

2011-12-08 10:51:25

JavaNIO

2025-04-24 10:05:51

2023-03-01 14:32:31

redisIOEpoll

2024-09-26 16:01:52

2021-03-24 08:03:38

NettyJava NIO網絡技術

2009-06-29 18:09:12

多路復用Oracle

2022-01-06 14:45:10

數據庫連接池IO

2021-02-10 08:09:48

Netty網絡多路復用

2023-05-08 00:06:45

Go語言機制

2023-12-06 07:16:31

Go語言語句
點贊
收藏

51CTO技術棧公眾號

色七七影院综合| 色综合天天做天天爱| 成人动漫视频在线观看完整版 | 精品欧美午夜寂寞影院| 欧美午夜性色大片在线观看| 亚洲日本精品国产第一区| a天堂在线观看视频| 青草在线视频| 久久影院视频免费| 91精品在线看| 欧美日韩国产黄色| 一区二区三区视频播放| 91国偷自产一区二区使用方法| 天天做天天爱天天高潮| 色播色播色播色播色播在线| 国产中文字幕精品| 4444欧美成人kkkk| 欧美丰满熟妇bbbbbb| 色棕色天天综合网| 欧美性xxxx极品hd满灌| 一级全黄肉体裸体全过程| 免费理论片在线观看播放老| 亚洲在线观看| 欧美巨大黑人极品精男| 久久久福利影院| gay欧美网站| 亚洲综合av网| 一区二区三区不卡在线| 蜜桃视频在线入口www| 国产成人午夜99999| 日韩视频免费在线| 99久久人妻无码精品系列| 亚洲天堂av在线| 91免费视频大全| 日韩av免费看网站| 欧美a在线播放| 蜜臀av免费一区二区三区| 欧美mv日韩mv国产网站app| www.com黄色片| 桃花岛tv亚洲品质| 精品久久久久久久久久久久| 黄色一级片黄色| 国产原厂视频在线观看| 中文字幕日韩一区二区| 色综合电影网| av在线电影免费观看| 久久久久久久久久久久久久久99| 极品校花啪啪激情久久| 欧美一区,二区| 国产成人a级片| 92福利视频午夜1000合集在线观看| 中文字幕av久久爽| 免费人成网站在线观看欧美高清| 国产成人综合精品| 欧美另类高清videos的特点| 老司机精品福利视频| 日韩av片永久免费网站| 日韩手机在线视频| 丝袜诱惑亚洲看片| 国产精品久久久久久亚洲调教| 无码人妻精品一区二区三区9厂| 久久九九电影| 国产精品免费视频xxxx| 一级片视频免费| 久久99精品国产麻豆婷婷| 成人久久久久爱| 亚洲国产精品成人久久蜜臀| 成人激情小说网站| 国产精品精品久久久| www.亚洲激情| 久久99精品久久久| 不卡日韩av| 亚洲日本在线播放| 国产欧美一区二区精品性| 亚洲高清123| 超碰在线网址| 午夜视频一区在线观看| 久久久久久久久久福利| 国产香蕉久久| 日韩久久久久久| 国产伦精品一区二区三区精品| 日本一区福利在线| 中文字幕日韩视频| 久久久全国免费视频| 亚洲伊人观看| 成人国产精品一区| 人妻妺妺窝人体色www聚色窝| 久久亚洲二区三区| 一区二区三区四区欧美日韩| 久久香蕉av| 在线看国产一区二区| 成人在线播放网址| 筱崎爱全乳无删减在线观看 | 久久欧美中文字幕| 在线不卡日本| 欧美在线极品| 91精品国模一区二区三区| 久久人妻精品白浆国产| 成人亚洲精品| 日韩电影视频免费| 精品无码久久久久成人漫画| 99成人在线| 国产自摸综合网| 天堂网在线观看视频| 国产精品网站在线观看| 成品人视频ww入口| 日本午夜免费一区二区| 欧美在线|欧美| 免费黄色av网址| 欧美日韩一二三四| 久久乐国产精品| 亚洲熟女乱色一区二区三区久久久| 粉嫩久久99精品久久久久久夜| 色噜噜狠狠色综合网| 不卡av免费观看| 欧美精品久久久久久久多人混战| 日韩免费高清在线| 亚洲精品在线a| 综合av色偷偷网| 特黄视频免费看| 国产精品日本| 99国产盗摄| 日本福利在线| 在线视频你懂得一区二区三区| 无码人妻一区二区三区在线| 天天色综合色| 国产成人综合亚洲| 青青草免费观看免费视频在线| 夜夜嗨av一区二区三区中文字幕| 日本黄大片一区二区三区| 网友自拍一区| 欧美一级片一区| 人人妻人人澡人人爽人人欧美一区 | 精品福利免费观看| 91人人澡人人爽| 欧美 日韩 国产 一区| 国产日韩欧美影视| av在线免费播放网站| 在线观看免费成人| 波多野在线播放| 日韩国产欧美在线播放| 欧美大陆一区二区| 日本在线影院| 日韩精品视频三区| www.国产一区二区| 久久蜜桃av一区精品变态类天堂 | 亚洲精品一区二区三区精华液| 黄色a级片在线观看| 国精产品一区一区三区mba视频| 亚洲黄色成人久久久| 日韩一区精品| 欧美高清hd18日本| 色www亚洲国产阿娇yao| 蜜乳av一区二区| 一本久久a久久精品vr综合| 国产91在线播放精品| 中文字幕在线看视频国产欧美| 91国产精品一区| 中文字幕亚洲综合久久菠萝蜜| 超碰人人草人人| 第四色在线一区二区| 久久久久亚洲精品成人网小说| 免费观看黄色一级视频| 香蕉加勒比综合久久| 成人网站免费观看| 日韩中文字幕麻豆| 伊人久久青草| 亚洲视频一起| 欧美亚洲在线视频| fc2在线中文字幕| 欧美一级在线视频| 亚洲欧美在线观看视频| 久久久久99精品一区| 日韩一级理论片| 9l视频自拍蝌蚪9l视频成人 | 久久亚洲国产成人精品性色| 91网站在线播放| 男人透女人免费视频| 久久国产精品亚洲人一区二区三区| 亚洲一区二区久久久久久| heyzo高清国产精品| 亚洲人成人99网站| 国产精品毛片一区二区在线看舒淇 | 亚洲国产一区二区三区在线播| 国模大尺度视频一区二区| 国内成人精品一区| jizz在线观看中文| 欧美精品一区二区蜜臀亚洲| 亚洲精品91天天久久人人| 一区二区三区精品久久久| 一二三不卡视频| 国产在线一区观看| 亚洲色欲综合一区二区三区| 99九九热只有国产精品| 国产日韩欧美一区二区三区四区| www.成人在线视频| 久久全国免费视频| 91电影在线播放| 91极品美女在线| 老女人性淫交视频| 久草热8精品视频在线观看| 欧美亚洲色图视频| 久久人体视频| 久久国产精品99久久久久久丝袜| 中文字幕成人| 国产91亚洲精品| 99riav视频在线观看| 在线午夜精品自拍| 亚洲 精品 综合 精品 自拍| 欧美一区二区三区的| 日韩精品一区不卡| 亚洲成国产人片在线观看| 国产三级精品三级观看| 美国十次了思思久久精品导航 | 欧洲在线免费视频| 肉丝袜脚交视频一区二区| 欧美乱做爰xxxⅹ久久久| 国产欧美日韩| 国偷自产av一区二区三区小尤奈| 国产精品美女久久久久| 国产精品免费一区豆花| 亚洲国产福利| 97av在线视频免费播放| 亚洲大胆人体大胆做受1| 日韩视频免费观看高清完整版在线观看 | 熟女人妻在线视频| 国产91富婆露脸刺激对白| 在线能看的av网站| 蜜桃视频在线一区| 国产超碰在线播放| 久久久xxx| 国产女女做受ⅹxx高潮| 国产日韩欧美三区| 国精产品一区一区三区视频| 人人精品视频| 国产欧美亚洲日本| 最新国产精品精品视频| 999在线免费观看视频| 免费看日产一区二区三区| 成人天堂噜噜噜| 亚洲精品三区| 成人激情黄色网| 99er精品视频| 亚洲在线一区二区| 91精品亚洲一区在线观看| 成人久久18免费网站图片| 国产精品亚洲欧美日韩一区在线| 国产一区二区在线播放| 亚洲天堂网站| 成人写真福利网| 精品欧美视频| 国产精选一区二区| 亚州av日韩av| 日韩精品国内| 日韩欧美视频| 可以免费看的黄色网址| 欧美视频久久| 国产精品无码一区二区在线| 国产精品亚洲欧美| 妓院一钑片免看黄大片| 久久av中文字幕片| 夜夜爽久久精品91| k8久久久一区二区三区| 国产精品无码一区二区三区免费| 久久精品欧美日韩| 香蕉成人在线视频| 亚洲精品va在线观看| 久久狠狠高潮亚洲精品| 91九色02白丝porn| 亚洲视频在线观看免费视频| 欧美一级欧美一级在线播放| 丰满人妻熟女aⅴ一区| 日韩精品亚洲视频| 精品人妻伦一区二区三区久久| 午夜激情视频在线| 中文字幕视频在线免费欧美日韩综合在线看 | 国产欧美综合在线观看第十页| 国产7777777| 亚洲精品国产a| 国产成人一级片| 欧美精品1区2区3区| 国模私拍视频在线| 国产一区二区三区在线| 久热国产在线| 97超视频免费观看| 久久天天久久| 精品伊人久久大线蕉色首页| 日韩电影免费网站| 日韩小视频网站| 日本网站在线观看一区二区三区| 色哟哟在线观看视频| 久久久久久久网| 欧美三根一起进三p| 日本二三区不卡| www视频在线| 在线播放日韩欧美| 超黄网站在线观看| 国产在线拍偷自揄拍精品| 久久99精品国产自在现线| 亚洲在线播放电影| 男女精品视频| 日韩黄色一区二区| 国产精品高潮久久久久无| 可以在线观看av的网站| 日韩一区二区在线看| 国产h视频在线观看| 欧美激情综合色综合啪啪五月| 91大神在线观看线路一区| 国产亚洲精品美女久久久m| 午夜精品一区二区三区国产| 欧美日韩在线不卡视频| 国产iv一区二区三区| 内射毛片内射国产夫妻| 欧美性生交大片免费| www.亚洲天堂.com| 俺去啦;欧美日韩| 久久久人成影片一区二区三区在哪下载| 欧美精品一二三区| 亚洲最大的黄色网| 伊人夜夜躁av伊人久久| 中文字幕日韩国产| 亚洲色图综合久久| 久草在线资源福利站| 国产伦精品一区二区| 欧美福利一区| 精品人妻一区二区三区免费| 国产精品国产三级国产aⅴ中文| 日韩免费av网站| 亚洲欧美日韩第一区| 国产无遮挡裸体视频在线观看| 国产激情美女久久久久久吹潮| 亚洲人体av| 视频区 图片区 小说区| 中文字幕一区二| 一级片一区二区三区| 日韩在线视频二区| 国产精品蜜月aⅴ在线| 午夜精品一区二区在线观看的| 丝袜诱惑亚洲看片| 亚洲性猛交xxxx乱大交| 色综合久久久久网| 深夜福利在线视频| 欧美一级视频在线观看| 天天躁日日躁狠狠躁欧美巨大小说| 久久国产精品网| 成人av免费在线| www.日本精品| 亚洲跨种族黑人xxx| 日日av拍夜夜添久久免费| 日韩欧美亚洲日产国产| 蜜臀久久99精品久久久久宅男| 蜜桃av.com| 777色狠狠一区二区三区| 黄色网页在线免费看| 99porn视频在线| 亚洲黑丝一区二区| 熟女少妇一区二区三区| 国产三级精品视频| 久久久国产免费| 色老头一区二区三区在线观看| 91精品一久久香蕉国产线看观看| 在线无限看免费粉色视频| 国产精品一区二区久久不卡 | 北条麻妃在线| 成人有码在线视频| 91久久午夜| 免费看黄色av| 欧美一级日韩不卡播放免费| 精品精品导航| 欧美一区二区福利| 久久成人免费日本黄色| 久久久久亚洲AV| 亚洲人午夜色婷婷| 国产精品亚洲欧美日韩一区在线 | 182在线视频观看| 欧美一二三区| 精品系列免费在线观看| 国产无遮挡aaa片爽爽| 欧美日韩aaa| 青草av在线| 日韩福利在线| 岛国精品在线播放| 欧美国产一级片| 欧美裸体男粗大视频在线观看| 日韩欧美国产大片| 亚洲第一色av| 欧美三级欧美成人高清www| 亚洲1卡2卡3卡4卡乱码精品| 国产日韩一区二区| 久久精品99国产国产精| 日韩欧美一区二区一幕| 色婷婷综合成人| 美女一区2区| 欧美一级特黄aaa| 色先锋资源久久综合| 金瓶狂野欧美性猛交xxxx| 午夜一区二区三区| 成人97人人超碰人人99| 99久久精品国产成人一区二区 | 国产精品18|