一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

多路IO復(fù)用模型和異步IO模型介紹

麥辣雞腿堡 ? 來源:盼盼編程 ? 作者:盼盼編程 ? 2023-10-08 17:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

多路 IO 復(fù)用模型

多路 IO 復(fù)用,有時也稱為事件驅(qū)動 IO。它的基本原理就是有個函數(shù)會不斷地輪詢所負(fù)責(zé)的所有 socket ,當(dāng)某個 socket有數(shù)據(jù)到達(dá)了,就通知用戶進(jìn)程。IO 復(fù)用模型的流程如圖:

圖片

當(dāng)用戶進(jìn)程調(diào)用了 select ,那么整個進(jìn)程會被阻塞,而同時,內(nèi)核會 “監(jiān)視” 所有 select 負(fù)責(zé)的 socket ,當(dāng)任何一個 socket中的數(shù)據(jù)準(zhǔn)備好了, select 就會返回。這個時候用戶進(jìn)程再調(diào)用 read 操作,將數(shù)據(jù)從內(nèi)核拷貝到用戶進(jìn)程。

這個模型和阻塞 IO 的模型其實(shí)并沒有太大的不同,事實(shí)上還更差一些 因為這里需要使用兩個系統(tǒng)調(diào)用,而阻塞 IO 只調(diào)用了一個系統(tǒng)調(diào)用recvfrom,用 select 的優(yōu)勢在于它可以同時處理多個連接。

如果處理的連接數(shù)不是很高的話,使用 select/epoll Web server 定比使用多線程的阻塞 IO Web server性能更好,可能延遲還更大;select/poll 的優(yōu)勢并不是對于單個連接能處理得更快,而是在于能處理更多的連接。

異步 IO 模型

圖片

上面是異步 IO 模型。

用戶進(jìn)程發(fā)起 read 操作之后,立刻就可以開始去做其他的事;而另一方面,從內(nèi)核的角度,當(dāng)它收到一個異步的 read請求操作之后,首先會立刻返回,所以不會對用戶進(jìn)程產(chǎn)生任何阻塞。

然后,內(nèi)核會等待數(shù)據(jù)準(zhǔn)備完成,然后將數(shù)據(jù)拷貝到用戶內(nèi)存中,當(dāng)這一切都完成之后,內(nèi)核會給用戶進(jìn)程發(fā)送一個信號,返回 read 操作已完成的信息。

調(diào)用阻塞 IO 一直阻塞住對應(yīng)的進(jìn)程直到操作完成,而非阻塞 IO 在內(nèi)核還在準(zhǔn)備數(shù)據(jù)的情況下會立刻返回。兩者的區(qū)別就在于同步 IO 進(jìn)行 IO操作時會阻塞進(jìn)程。

非阻塞 IO 在執(zhí)行 recvfrom 這個系統(tǒng)調(diào)用的時候,如果內(nèi)核的數(shù)據(jù)沒有準(zhǔn)備好,這時候不會阻塞進(jìn)程。但是當(dāng)內(nèi)核中數(shù)據(jù)準(zhǔn)備好時,recvfrom會將數(shù)據(jù)從內(nèi)核拷貝到用戶內(nèi)存中,這個時候進(jìn)程則被阻塞。

而異步 IO 則不 樣,當(dāng)進(jìn)程發(fā)起 IO 操作之后,就直接返回,直到內(nèi)核發(fā)送一個信號,告訴進(jìn)程 IO
已完成,則在這整個過程中,進(jìn)程完全沒有被阻塞。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • IO
    IO
    +關(guān)注

    關(guān)注

    0

    文章

    490

    瀏覽量

    40353
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1910

    瀏覽量

    86700
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7795

    瀏覽量

    90617
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3504

    瀏覽量

    50193
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux驅(qū)動開發(fā)之IO模型介紹

    在Linux驅(qū)動開發(fā)中,應(yīng)用程序通過循環(huán)讀取或者中斷的方式都會使得CPU的占用率很高。本文介紹五種IO模型,可以用來優(yōu)化文件讀寫方式,降低CPU的使用率。
    發(fā)表于 07-29 09:03 ?998次閱讀

    Linux驅(qū)動學(xué)習(xí)筆記:異步IO

    前幾篇介紹了幾種IO模型,今天介紹另一種IO模型——異步
    發(fā)表于 06-12 16:24 ?946次閱讀

    基于多路復(fù)用模型的Netty框架

    系統(tǒng)處理請求的能力。 有了NIO之后,一個線程即可處理多個連接事件,基于多路復(fù)用模型的Netty框架,不僅降低了使用NIO的復(fù)雜度, 優(yōu)點(diǎn) Netty是一款以java NIO為基礎(chǔ),基于事件驅(qū)動模型支持
    的頭像 發(fā)表于 09-30 11:30 ?1027次閱讀

    IO模型以及多路復(fù)用的總結(jié)及視頻資料

    于用戶態(tài)和內(nèi)核的地址空間之間,而無論這些文件描述符是否就緒。它的開銷隨著文件描述符數(shù)量的增加而線性增加?! ∷灾笥殖霈F(xiàn)了一個select和poll的增強(qiáng)版本epoll,此處就不做過多的介紹。  io多路復(fù)用總結(jié)
    發(fā)表于 12-18 16:04

    淺析java的IO模型

    java IO初識與Linux網(wǎng)絡(luò)IO模型簡介
    發(fā)表于 08-05 06:28

    linux下的IO模型詳解

      開門見山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,
    發(fā)表于 10-09 16:12

    IO多路復(fù)用的幾種實(shí)現(xiàn)機(jī)制的分析

    服務(wù)器端編程經(jīng)常需要構(gòu)造高性能的IO模型,常見的IO模型有四種:同步和異步的概念描述的是用戶線程與內(nèi)核的交互方式:同步是指用戶線程發(fā)起
    發(fā)表于 03-07 11:40 ?5878次閱讀
    <b class='flag-5'>IO</b><b class='flag-5'>多路復(fù)用</b>的幾種實(shí)現(xiàn)機(jī)制的分析

    網(wǎng)絡(luò)IO的弊端以及多路復(fù)用IO的優(yōu)勢

    為了講多路復(fù)用,當(dāng)然還是要跟風(fēng),采用鞭尸的思路,先講講傳統(tǒng)的網(wǎng)絡(luò) IO 的弊端,用拉踩的方式捧起多路復(fù)用 IO 的優(yōu)勢。 為了方便理解,以下所有代碼都是偽代碼,知道其表達(dá)的意思即可。
    的頭像 發(fā)表于 08-25 18:01 ?3278次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>IO</b>的弊端以及<b class='flag-5'>多路復(fù)用</b><b class='flag-5'>IO</b>的優(yōu)勢

    一文詳細(xì)了解五種IO模型

    五種IO模型包括:阻塞IO、非阻塞IO、IO多路復(fù)用、信號驅(qū)動
    的頭像 發(fā)表于 02-14 14:38 ?6169次閱讀
    一文詳細(xì)了解五種<b class='flag-5'>IO</b><b class='flag-5'>模型</b>

    信號驅(qū)動IO異步IO的區(qū)別

    一. 談信號驅(qū)動IO (對比異步IO來看) 信號驅(qū)動IO 對比 異步 IO進(jìn)行理解 信號驅(qū)動
    的頭像 發(fā)表于 11-08 15:32 ?1452次閱讀
    信號驅(qū)動<b class='flag-5'>IO</b>與<b class='flag-5'>異步</b><b class='flag-5'>IO</b>的區(qū)別

    linux異步io框架iouring應(yīng)用

    完善的異步IO(網(wǎng)絡(luò)IO、磁盤IO)機(jī)制。 在網(wǎng)絡(luò)編程中,我們通常使用epoll IO多路復(fù)用
    的頭像 發(fā)表于 11-08 15:39 ?982次閱讀
    linux<b class='flag-5'>異步</b><b class='flag-5'>io</b>框架iouring應(yīng)用

    異步IO框架iouring介紹

    提供完善的異步IO(網(wǎng)絡(luò)IO、磁盤IO)機(jī)制。 在網(wǎng)絡(luò)編程中,我們通常使用epoll IO多路復(fù)用
    的頭像 發(fā)表于 11-09 09:30 ?3722次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>IO</b>框架iouring<b class='flag-5'>介紹</b>

    IO多路復(fù)用基本概念

    一、IO多路復(fù)用基本概念 select、poll、epoll都是IO多路復(fù)用的機(jī)制。IO多路復(fù)用
    的頭像 發(fā)表于 11-10 16:34 ?1844次閱讀
    <b class='flag-5'>IO</b><b class='flag-5'>多路復(fù)用</b>基本概念

    什么是io多路復(fù)用?IO多路復(fù)用的優(yōu)缺點(diǎn)

    IO多路復(fù)用是一種同步IO模型,它允許單個進(jìn)程/線程同時處理多個IO請求。具體來說,一個進(jìn)程/線程可以監(jiān)視多個文件句柄,一旦某個文件句柄就緒
    的頭像 發(fā)表于 01-18 15:48 ?2094次閱讀

    一文解讀Linux 5種IO模型

    Linux里有五種IO模型:阻塞IO、非阻塞IO多路復(fù)用IO、信號驅(qū)動式
    的頭像 發(fā)表于 11-09 11:12 ?817次閱讀
    一文解讀Linux 5種<b class='flag-5'>IO</b><b class='flag-5'>模型</b>