嵌入式Linux阻塞與非阻塞IO詳解
更新時間:2025年05月15日 09:06:44 作者:憂慮的烏龜蛋
這篇文章主要介紹了嵌入式Linux阻塞與非阻塞IO使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
一、阻塞IO與非阻塞IO基本概念
1.1 阻塞IO
- 定義:進程發(fā)起IO操作后,若數據不可用,進程會被掛起(阻塞),直到數據準備好才返回
- 特點:簡單直觀,但會導致進程暫停執(zhí)行其他任務
1.2 非阻塞IO
- 定義:進程發(fā)起IO操作后,若數據不可用,立即返回錯誤碼(EAGAIN/EWOULDBLOCK),不阻塞進程
- 特點:進程可繼續(xù)執(zhí)行其他任務,但需要輪詢檢查數據是否就緒
二、設置IO阻塞/非阻塞模式
// 打開時設置非阻塞 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資源等待數據
- 缺點:線程被阻塞無法處理其他任務,需要多線程處理多IO操作
非阻塞IO:
- 優(yōu)點:單線程可處理多個IO操作,不會被IO操作阻塞,可以同時處理其他任務
- 缺點:,需要不斷輪詢,消耗CPU資源,代碼邏輯復雜,輪詢頻率設置困難
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
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-03