嵌入式Linux阻塞與非阻塞IO詳解
更新時間:2025年05月15日 09:06:44 作者:憂慮的烏龜?shù)?
這篇文章主要介紹了嵌入式Linux阻塞與非阻塞IO使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
一、阻塞IO與非阻塞IO基本概念
1.1 阻塞IO
- 定義:進程發(fā)起IO操作后,若數(shù)據(jù)不可用,進程會被掛起(阻塞),直到數(shù)據(jù)準備好才返回
- 特點:簡單直觀,但會導致進程暫停執(zhí)行其他任務
1.2 非阻塞IO
- 定義:進程發(fā)起IO操作后,若數(shù)據(jù)不可用,立即返回錯誤碼(EAGAIN/EWOULDBLOCK),不阻塞進程
- 特點:進程可繼續(xù)執(zhí)行其他任務,但需要輪詢檢查數(shù)據(jù)是否就緒
二、設(shè)置IO阻塞/非阻塞模式
// 打開時設(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對比
阻塞IO:
- 優(yōu)點:編程模型簡單,無需額外狀態(tài)檢查,不消耗CPU資源等待數(shù)據(jù)
- 缺點:線程被阻塞無法處理其他任務,需要多線程處理多IO操作
非阻塞IO:
- 優(yōu)點:單線程可處理多個IO操作,不會被IO操作阻塞,可以同時處理其他任務
- 缺點:,需要不斷輪詢,消耗CPU資源,代碼邏輯復雜,輪詢頻率設(shè)置困難
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux (Ubuntu 18.04) 下安裝vim編輯器的方法
這篇文章主要介紹了Linux (Ubuntu 18.04) 下安裝vim編輯器的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07Apache Request-URI Too Large錯誤解決方法
這篇文章主要介紹了Apache Request-URI Too Large錯誤解決方法,需要的朋友可以參考下2014-05-05詳解CentOS升級Python2.6到Python2.7并安裝pip
本篇文章主要介紹了CentOS升級Python2.6到Python2.7并安裝pip,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03Linux?apache實現(xiàn)https的配置方法
http協(xié)議主要是用來是實現(xiàn)萬維網(wǎng)站點資源的訪問,http協(xié)議+ssl協(xié)議,默認使用tcp的443端口,這篇文章主要介紹了Linux?apache實現(xiàn)https的配置,需要的朋友可以參考下2022-10-10