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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO

發布時間:2024/4/11 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • IO模型
    • 阻塞與非阻塞
    • 同步與異步
  • 阻塞IO
  • 非阻塞IO
  • 信號驅動IO
  • 多路復用IO
  • 異步IO


IO模型

根據各自的特性不同,IO模型被分為阻塞IO、非阻塞IO、信號驅動IO、異步IO、多路復用IO五類。
最主要的兩個區別就是阻塞與非阻塞,同步與異步

阻塞與非阻塞

阻塞與非阻塞最主要的區別就是程序在等待調用結果時的狀態。

阻塞:為了完成一個功能發起調用,如果不具備完成功能的條件,則調用會一直等待
非阻塞:為了完成一個功能發起調用,如果不具備完成功能的條件,則立即報錯返回

同步與異步

同步與異步最主要的區別就是功能完成的流程是否是順序化的,且完成的是自身還是系統。

同步:功能完成的流程是順序化的,并且功能由自身完成。
異步:功能完成的流程是不確定的,并且功能由系統完成。


阻塞IO

發起IO調用,如果不具備IO條件,則一直等待直到條件就緒。

優點流程以及代碼實現都非常簡單,任務順序操作

缺點任務處理效率較低,無法充分利用資源


非阻塞IO

發起一個IO調用,如果不具備IO條件,則立即報錯返回,繼續執行其他命令。通過一個循環來不斷發起IO請求,直到條件就緒。

優點:與阻塞IO相比較來說,利用了等待的時間去做了其他的事情,對資源的利用更加充分

缺點:與阻塞IO對比,IO調用需要循環發起,流程更加復雜。并且如果IO條件就緒了,也要等待上一輪循環結束后進入當前循環,才能進行處理,這就導致了IO不夠實時

非阻塞IO可以通過fcntl函數設置描述符狀態來實現
例如:

void SetNoBlock(int fd) {int flag = fcntl(fd, F_GETFL, 0);flag |= O_NONBLOCK;fcntl(fd, F_SETFL, flag); }

信號驅動IO

自定義一個IO就緒的信號,當IO就緒時就發出這個信號。在沒有收到信號時,可以繼續處理其他事情,一旦收到信號,就會中斷當前操作,來優先處理IO事件。

優點:相較于非阻塞IO,因為信號到來后就直接強行中斷進行處理,更加實時。并且在沒收到信號的時候可以執行其他工作,資源利用更加充分

缺點:因為需要自定義信號,又要有主控流程也要有信號處理流程,并且還需要考慮信號是否可靠導致的事件丟失情況,流程會更加的復雜


多路復用IO

用于對大量的IO事件進行監控,能夠讓用戶只針對就緒了指定事件(可讀、可寫、異常) 的IO進行IO操作。只針對就緒的描述符進行操作,避免了阻塞,并且提高了效率。

在Linux下,操作系統提供了三種模型:select模型、poll模型、epoll模型。這三種模型的具體使用以及細節會放到下一篇博客中

根據不同的模型具體的優缺點也不一樣。


異步IO

IO處理的順序不確定,整個IO的過程(等待 + 數據拷貝)由操作系統來完成而并非用戶。

流程

  • 自定義一個IO完成信號
  • 發起異步調用后返回,此時用戶可以繼續處理其他事情
  • 系統進行IO事件的等待以及數據拷貝
  • IO完成后通過信號通知進程IO
  • 優點:對資源的利用最為充分, 以最高的效率進行任務的處理
    缺點:資源消耗較高, 流程最為復雜

    上面的五種IO模型,從前往后處理的效率逐漸增加,對資源的利用也增加充分,但是流程也越來越復雜。


    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。