最近面試的幾個問題 (三 io 多路復用

2022-05-10 10:11:40 字數 2250 閱讀 1330

五種io模型 

1.阻塞i/o模型

老李去火車站買票,排隊三天買到一張退票。

耗費:在車站吃喝拉撒睡 3天,其他事一件沒乾。

2.非阻塞i/o模型

老李去火車站買票,隔12小時去火車站問有沒有退票,三天後買到一張票。耗費:往返車站6次,路上6小時,其他時間做了好多事。

3.i/o復用模型

1.select/poll

老李去火車站買票,委託黃牛,然後每隔6小時**黃牛詢問,黃牛三天內買到票,然後老李去火車站交錢領票。

耗費:打**

2.epoll

老李去火車站買票,委託黃牛,黃牛買到後即通知老李去領,然後老李去火車站交錢領票。

耗費:無需打**

4.訊號驅動i/o模型

老李去火車站買票,給售票員留下**,有票後,售票員**通知老李,然後老李去火車站交錢領票。

耗費:無需打**

5.非同步i/o模型

老李去火車站買票,給售票員留下**,有票後,售票員**通知老李並快遞送票上門。

耗費:無需打**

1 它的形成原因

如果乙個i/o流進來,我們就開啟乙個程序處理這個i/o流。那麼假設現在有一百萬個i/o流進來,那我們就需要開啟一百萬個程序一一對應處理這些i/o流(——這就是傳統意義下的多程序併發處理)。思考一下,一百萬個程序,你的cpu占有率會多高,這個實現方式及其的不合理。所以人們提出了i/o多路復用這個模型,乙個執行緒,通過記錄i/o流的狀態來同時管理多個i/o,可以提高伺服器的吞吐能力

2 它的實現方式 select、poll、epoll

2.1 select函式的呼叫過程

a. 從使用者空間將fd_set拷貝到核心空間

b. 註冊**函式

c. 呼叫其對應的poll方法

d. poll方法會返回乙個描述讀寫是否就緒的mask掩碼,根據這個mask掩碼給fd_set賦值。

e. 如果遍歷完所有的fd都沒有返回乙個可讀寫的mask掩碼,就會讓select的程序進入休眠模式,直到發現可讀寫的資源後,重新喚醒等待佇列上休眠的程序。如果在規定時間內都沒有喚醒休眠程序,那麼程序會被喚醒重新獲得cpu,再去遍歷一次fd。

f. 將fd_set從核心空間拷貝到使用者空間

2.2 select函式優缺點

缺點:兩次拷貝耗時、輪詢所有fd耗時,支援的檔案描述符太小

優點:跨平台支援

2.3 poll函式的呼叫過程(與select完全一致)

2.4 poll函式優缺點

優點:連線數(也就是檔案描述符)沒有限制(鍊錶儲存)

缺點:大量拷貝,水平觸發(當報告了fd沒有被處理,會重複報告,很耗效能)

2.5 epoll的優點

沒有最大併發連線的限制

只有活躍可用的fd才會呼叫callback函式

記憶體拷貝是利用mmap()檔案對映記憶體的方式加速與核心空間的訊息傳遞,減少複製開銷。(核心與使用者空間共享一塊記憶體)

只有存在大量的空閒連線和不活躍的連線的時候,使用epoll的效率才會比select/poll高

3 有趣的解釋 再次鞏固一下io模型

3.1 阻塞io, 給女神發一條簡訊, 說我來找你了, 然後就默默的一直等著女神下樓, 這個期間除了等待你不會做其他事情, 屬於備胎做法.

3.2 非阻塞io, 給女神發簡訊, 如果不回, 接著再發, 一直發到女神下樓, 這個期間你除了發簡訊等待不會做其他事情, 屬於專一做法.

3.3 io多路復用, 是找乙個宿管大媽來幫你監視下樓的女生, 這個期間你可以些其他的事情. 例如可以順便看看其他妹子,玩玩王者榮耀, 上個廁所等等. io復用又包括 select, poll, epoll 模式. 那麼它們的區別是什麼?

3.3.1select大媽 每乙個女生下樓, select大媽都不知道這個是不是你的女神, 她需要乙個乙個詢問, 並且select大媽能力還有限, 最多一次幫你監視1024個妹子

3.3.2poll大媽不限制盯著女生的數量, 只要是經過宿舍樓門口的女生, 都會幫你去問是不是你女神

3.3.3 epoll大媽不限制盯著女生的數量, 並且也不需要乙個乙個去問. 那麼如何做呢? epoll大媽會為每個進宿舍樓的女生臉上貼上乙個大字條,上面寫上女生自己的名字, 只要女生下樓了, epoll大媽就知道這個是不是你女神了, 然後大媽再通知你.

Linux驅動面試的幾個問題

1 字元型驅動裝置你是怎麼建立裝置檔案的,就是 dev 下面的裝置檔案,供上層應用程式開啟使用的檔案?答 mknod命令結合裝置的主裝置號和次裝置號,可建立乙個裝置檔案。評 這只是其中一種方式,也叫手動建立裝置檔案。還有udev mdev自動建立裝置檔案的方式,udev mdev是執行在使用者態的程...

面試外企常被問到的幾個問題

面試外企常被問到的幾個問題請介紹一下你自己。這是外企常問的問題。一般人回答這個問題過於平常,只說姓名 年齡 愛好 工作經驗,這些在簡歷上都有,其實,外企最希望知道的是求職者能否勝任工作,包括 最強的技能 最深入研究的知識領域 個性中最積極的部分 做過的最成功的事,主要的成就等,這些都可以和學習無關,...

IO流中需要注意的幾個問題

inputstream outputstream reader writer是抽象類,不能直接申明物件使用。附 io繼承關係圖 除以上四種為抽象類,其他均為其實現類 1 兩個類的構造方法都丟擲 filenotfoundexception 的已檢查異常,保證引數指定的檔案存在 2 fileoutput...