嵌入式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)文章
64位CentOS 6.0下搭建LAMP環(huán)境詳細(xì)步驟
這篇文章主要介紹了系統(tǒng)環(huán)境:Centos6.0 x64的lamp運(yùn)行環(huán)境配置教程,需要的朋友可以參考下2013-07-07
Linux將文件或目錄打成rpm包的實(shí)現(xiàn)方法
最近因?yàn)橛龅揭粋€(gè)服務(wù)器受系統(tǒng)限制,只能上傳rpm包才能使用,而我們的服務(wù)都是文件,那么怎么將文件都打成rpm包呢???我也是找了好幾個(gè),終于找到了一個(gè)簡(jiǎn)單好用的打包方式,下面來給大家講解一下部署及打包、安裝,需要的朋友可以參考下2024-11-11
Linux如何查詢當(dāng)前進(jìn)程或線程的資源使用情況
文章介紹如何通過Linux的/proc文件系統(tǒng)和API(如getrusage、sysinfo、times)獲取App資源使用情況,用于性能分析和調(diào)試,涵蓋進(jìn)程狀態(tài)、內(nèi)存、CPU、網(wǎng)絡(luò)等信息,同時(shí)說明了相關(guān)文件和系統(tǒng)的使用方法及注意事項(xiàng)2025-07-07
Ubuntu虛擬機(jī)下使用cutecom進(jìn)行串口通信的方法
今天小編就為大家分享一篇關(guān)于Ubuntu虛擬機(jī)下使用cutecom進(jìn)行串口通信的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
關(guān)于lvm快照結(jié)合rsync實(shí)現(xiàn)MySQL數(shù)據(jù)卷的遠(yuǎn)程備份教程
這篇文章主要介紹了關(guān)于lvm快照結(jié)合rsync實(shí)現(xiàn)MySQL數(shù)據(jù)卷的遠(yuǎn)程備份教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
linux環(huán)境openssl、openssh升級(jí)流程
該文章詳細(xì)介紹了在Ubuntu 22.04系統(tǒng)上升級(jí)OpenSSL和OpenSSH的方法,首先,升級(jí)OpenSSL的步驟包括下載最新版本、安裝編譯環(huán)境、備份和安裝、驗(yàn)證等,然后,升級(jí)OpenSSH的步驟包括下載最新版本、安裝相關(guān)依賴、解壓和編譯安裝、查看版本、備份替換文件、重啟服務(wù)等2025-03-03

