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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接)

發(fā)布時間:2023/11/30 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

高級IO:

五種典型IO:

阻塞IO/非阻塞IO/信號驅(qū)動IO/異步IO/IO多路轉(zhuǎn)接
IO多路轉(zhuǎn)接模型:select/poll/epoll

五種典型IO

阻塞IO

IO操作的流程:等待IO操作條件具備,然后進(jìn)行數(shù)據(jù)拷貝
為了完成IO操作發(fā)起調(diào)用,若當(dāng)前不具備IO操作條件,則等待,直到條件具備,完成IO操作后調(diào)用返回

釣魚的時候,手里一直握著魚竿,等待?上鉤。

非阻塞IO

為了完成IO操作發(fā)起調(diào)用,若當(dāng)前不具備IO操作條件,則立即報錯返回;可以干點其他的事情,循環(huán)過來進(jìn)行判斷

把魚竿放下去,去做其他事情,隔一段時間過來看一次,缺點:回來時?跑了。所以出現(xiàn)信號驅(qū)動IO
非阻塞IO往往需要程序員循環(huán)的方式反復(fù)嘗試讀寫文件描述符, 這個過程稱為輪詢. 這對CPU來說是較大的浪費, 一 般只有特定場景下才使用.

信號驅(qū)動IO

提前對IO信號自定義處理方式,當(dāng)IO條件具備時,操作系統(tǒng)通過信號通知進(jìn)程,這時候IO條件已經(jīng)具備,直接發(fā)起調(diào)用進(jìn)行數(shù)據(jù)拷貝

釣魚的時候,拋出魚竿,在魚竿上綁上一個鈴鐺,如果?咬鉤了,就能及時知道了

異步IO

IO操作條件的等待與數(shù)據(jù)拷貝都由操作系統(tǒng)來進(jìn)行等待與操作,等到IO操作完成后,通過信號通知進(jìn)程,進(jìn)程直接對數(shù)據(jù)進(jìn)行操作

釣魚的時候,拋出魚竿,找個人幫你釣魚,調(diào)到?了,叫一下你

總結(jié)

IO幾種操作中,IO操作效率越來越高,但是流程控制越來越復(fù)雜

高級IO重要概念

阻塞與非阻塞

  • 阻塞:當(dāng)前不具備操作條件時,調(diào)用掛起等待,直到條件具備,完成操作后調(diào)用返回
  • 非阻塞:當(dāng)前不具備操作條件,調(diào)用直接報錯返回
  • 阻塞與非阻塞:關(guān)注的并不是操作是否完成,而是調(diào)用是否立即返回

同步通信 vs 異步通信

同步:當(dāng)前不具備操作條件時,調(diào)用掛起等待,直到條件具備,完成操作后調(diào)用返回
異步:發(fā)起操作的調(diào)用,這個操作并不由自己完成,由別人完成
同步與異步:關(guān)注的是操作是否由自己完成
同步通常是阻塞的;但是異步有阻塞也有非阻塞

  • 異步阻塞:發(fā)起調(diào)用完成功能,功能由操作系統(tǒng)完成,但是進(jìn)程自身一直等待操作系統(tǒng)完成完成,完成之后返回

  • 異步非阻塞:發(fā)起調(diào)用完成功能,功能由操作系統(tǒng)完成,進(jìn)程自身立即返回

  • 所謂同步,就是在發(fā)出一個調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回. 但是一旦調(diào)用返回,就得 到返回值了; 換句話說,就是由調(diào)用者主動等待這個調(diào)用的結(jié)果;

  • 異步則是相反,調(diào)用在發(fā)出之后,這個調(diào)用就直接返回了,所以沒有返回結(jié)果; 換句話說,當(dāng)一個異步 過程調(diào)用發(fā)出后,調(diào)用者不會立刻得到結(jié)果; 而是在調(diào)用發(fā)出后,被調(diào)用者通過狀態(tài)、通知來通知調(diào)用 者,或通過回調(diào)函數(shù)處理這個調(diào)用.

同步和異步關(guān)注的是消息通信機(jī)制.

了解Linux下的AIO—異步IO

https://blog.csdn.net/brucexu1978/article/details/7085924

IO多路轉(zhuǎn)接/IO多路復(fù)用

對大量描述符進(jìn)行事件監(jiān)控(可讀事件/可寫事件/異常事件)監(jiān)控

作用
  • 前邊基本的tcp服務(wù)器只能與一個客戶端通信一次
  • 因為服務(wù)器端不知道新的客戶端連接請求以及客戶端數(shù)據(jù)什么時候到來,因此程序流程只能寫死,導(dǎo)致程序會卡死在accept/recv這里
  • 假設(shè)服務(wù)端若是知道什么時候新的客戶端連接起來,這時候再調(diào)用accept;程序流程就不會卡再accept這里,假若服務(wù)端知道什么時候客戶端的數(shù)據(jù)到來,然后再進(jìn)行recv,程序流程就不會卡在recv這里
  • 這時候服務(wù)端就可以實現(xiàn)并發(fā)操作,誰有數(shù)據(jù)到來就操作誰,否則不進(jìn)行操作
IO多路轉(zhuǎn)接

替進(jìn)程監(jiān)控大量描述符什么時候有什么事件,進(jìn)而進(jìn)程可以針對發(fā)生了相應(yīng)事件的描述符進(jìn)行相應(yīng)操作;

IO多路轉(zhuǎn)接模型
  • select
  • poll
  • epoll

總結(jié)

以上是生活随笔為你收集整理的高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。