嵌入式Linux阻塞與非阻塞IO詳解
更新時(shí)間:2025年05月15日 09:06:44 作者:憂慮的烏龜?shù)?
這篇文章主要介紹了嵌入式Linux阻塞與非阻塞IO使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
一、阻塞IO與非阻塞IO基本概念
1.1 阻塞IO
- 定義:進(jìn)程發(fā)起IO操作后,若數(shù)據(jù)不可用,進(jìn)程會(huì)被掛起(阻塞),直到數(shù)據(jù)準(zhǔn)備好才返回
- 特點(diǎn):簡(jiǎn)單直觀,但會(huì)導(dǎo)致進(jìn)程暫停執(zhí)行其他任務(wù)
1.2 非阻塞IO
- 定義:進(jìn)程發(fā)起IO操作后,若數(shù)據(jù)不可用,立即返回錯(cuò)誤碼(EAGAIN/EWOULDBLOCK),不阻塞進(jìn)程
- 特點(diǎn):進(jìn)程可繼續(xù)執(zhí)行其他任務(wù),但需要輪詢檢查數(shù)據(jù)是否就緒
二、設(shè)置IO阻塞/非阻塞模式
// 打開時(shí)設(shè)置非阻塞
int fd = open("/dev/device", O_RDWR | O_NONBLOCK);
// 修改已打開文件為非阻塞
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
// 修改為阻塞模式
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);三、阻塞IO和非阻塞IO對(duì)比
阻塞IO:
- 優(yōu)點(diǎn):編程模型簡(jiǎn)單,無需額外狀態(tài)檢查,不消耗CPU資源等待數(shù)據(jù)
- 缺點(diǎn):線程被阻塞無法處理其他任務(wù),需要多線程處理多IO操作
非阻塞IO:
- 優(yōu)點(diǎn):?jiǎn)尉€程可處理多個(gè)IO操作,不會(huì)被IO操作阻塞,可以同時(shí)處理其他任務(wù)
- 缺點(diǎn):,需要不斷輪詢,消耗CPU資源,代碼邏輯復(fù)雜,輪詢頻率設(shè)置困難
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux運(yùn)維基礎(chǔ)系統(tǒng)磁盤管理教程
這篇文章主要介紹了Linux運(yùn)維基礎(chǔ)系統(tǒng)磁盤管理教程,附含詳細(xì)的源碼示例,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家同學(xué)習(xí)共進(jìn)步2021-09-09
Shell中的單中括號(hào)和雙中括號(hào)的用法詳解
shell中的中括號(hào)在條件測(cè)試中是使用最頻繁的,無論是中括號(hào)還是雙中括號(hào),可用于一些條件的測(cè)試:算術(shù)比較、文件屬性測(cè)試、字符串比較。這篇文章主要介紹了Shell中的單中括號(hào)和雙中括號(hào)的用法詳解,需要的朋友可以參考下2022-12-12
Linux (Ubuntu 18.04) 下安裝vim編輯器的方法
這篇文章主要介紹了Linux (Ubuntu 18.04) 下安裝vim編輯器的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Apache Request-URI Too Large錯(cuò)誤解決方法
這篇文章主要介紹了Apache Request-URI Too Large錯(cuò)誤解決方法,需要的朋友可以參考下2014-05-05
詳解CentOS升級(jí)Python2.6到Python2.7并安裝pip
本篇文章主要介紹了CentOS升級(jí)Python2.6到Python2.7并安裝pip,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
tomcat 5.5連接池配置,如何讓工程為默認(rèn)工程
把驅(qū)動(dòng)程序拷貝到Tomcat 5.5\common\lib目錄下2009-06-06
Apache 本地服務(wù)器啟動(dòng)后又自動(dòng)停止解決辦法
setup_inherited_listeners(), WSASocket failed to open the inherited socket2010-04-04
Linux?apache實(shí)現(xiàn)https的配置方法
http協(xié)議主要是用來是實(shí)現(xiàn)萬維網(wǎng)站點(diǎn)資源的訪問,http協(xié)議+ssl協(xié)議,默認(rèn)使用tcp的443端口,這篇文章主要介紹了Linux?apache實(shí)現(xiàn)https的配置,需要的朋友可以參考下2022-10-10

