日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 嵌入式微處理器
[導(dǎo)讀]“我的人品有這么差嗎!半個小時Linux都沒調(diào)度我的線程!”。


1. 前言

“我的人品有這么差嗎!半個小時Linux都沒調(diào)度我的線程!”。

前些日子同事抱怨,“l(fā)inux是多線程系統(tǒng),每個線程都有一個時間片,為什么我的程序似乎一直沒被調(diào)度”,隨即給我演示執(zhí)行過程。大致歸納成下面的代碼邏輯。

程序啟動后僅僅輸出一行“run”,然后就沒有然后了,喝著咖啡、嗑著瓜子、帶薪摸魚,屏幕上干干凈凈。理想狀態(tài)下每10秒執(zhí)行任務(wù)完畢后輸出“do”。

分析代碼邏輯可知 “推斷” 代碼是否被運行的依據(jù)是屏幕上輸出 “do” ,”而這真的科學(xué)嗎?答案是否定的,linux有著雨露均沾的調(diào)度系統(tǒng),很難做到半小時沒被調(diào)度。問題就出在linux的 “行緩沖”機(jī)制

void main(){ printf("run\n"); while(1) { sleep(10); do_thing(); printf("do"); }}
2. 行緩沖


上文的printf輸出目標(biāo)設(shè)備由STDOUT指定,STDOUT可能指向115200波特率的串口設(shè)備,也可能指向本地圖形設(shè)備,相對于CPU而言他們的速度要慢上幾個數(shù)量級。都是為了提高機(jī)器或者程序的性能、提高CPU利用率。協(xié)調(diào)高速設(shè)備和低速設(shè)備之間速度的不匹配,操作系統(tǒng)默認(rèn)在標(biāo)準(zhǔn)I/O上采用行緩沖機(jī)制,printf的內(nèi)容首先存儲在內(nèi)存,當(dāng)緩沖填滿或檢測到換行符’’時則輸出到目標(biāo)設(shè)備

Linux上這個行緩沖默認(rèn)是1024Byte,每10s輸出do占用2Byte,為了等待緩沖填滿需要等待81min。

知道原理后解決方法就簡單了。

方法1:fflush強(qiáng)制刷新標(biāo)準(zhǔn)輸出stdout

#include void main(){ printf("run\n"); while(1) { sleep(10); do_thing(); fflush(stdout); printf("do"); }} 

方法2:輸出“換行符”

#include void main(){ printf("run\n"); while(1) { sleep(10); do_thing(); printf("do\n"); }}


END

來源:寫個解,作者:吳解君

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

在Zynq MPSoC開發(fā)中,實現(xiàn)PS端Linux與PL端自定義IP核的AXI互聯(lián)是構(gòu)建高性能異構(gòu)系統(tǒng)的關(guān)鍵環(huán)節(jié)。這種互聯(lián)方式充分發(fā)揮了ARM處理器的軟件優(yōu)勢與FPGA的硬件加速能力,為復(fù)雜應(yīng)用提供了強(qiáng)大的計算平臺。

關(guān)鍵字: Zynq MPSoC Linux

在物聯(lián)網(wǎng)與智能設(shè)備飛速普及的當(dāng)下,嵌入式系統(tǒng)的安全性與穩(wěn)定性愈發(fā)關(guān)鍵。實時操作系統(tǒng)(RTOS)憑借其高確定性、低延遲的特性,成為工業(yè)控制、醫(yī)療設(shè)備、航空電子等安全敏感領(lǐng)域的核心支撐。而內(nèi)存保護(hù)單元(MPU)作為硬件級安全...

關(guān)鍵字: Linux Windows

3月10日消息,2026年開年,一個名為OpenClaw的開源項目以閃電般的速度席卷了GitHub。它在短短一天內(nèi)就斬獲了9000顆星

關(guān)鍵字: OpenClaw Linux

3月6日消息,在摩根士丹利會議上,NVIDIA CEO黃仁勛分享了關(guān)于Agentic AI(代理式人工智能)轉(zhuǎn)折點的見解,并將開源軟件OpenClaw評價為“當(dāng)代最重磅的軟件發(fā)布”。

關(guān)鍵字: OpenClaw Linux

Linux內(nèi)存管理是操作系統(tǒng)的核心機(jī)制之一,通過虛擬內(nèi)存與物理內(nèi)存的分離設(shè)計,實現(xiàn)了多進(jìn)程內(nèi)存隔離、高效資源利用和系統(tǒng)穩(wěn)定性保障。

關(guān)鍵字: Linux 內(nèi)存

在高并發(fā)服務(wù)器開發(fā)中,線程池(ThreadPool)已成為解決多任務(wù)調(diào)度的核心方案。其設(shè)計并非偶然,而是針對傳統(tǒng)線程管理痛點的系統(tǒng)性優(yōu)化。

關(guān)鍵字: 線程 操作系統(tǒng)

在Linux系統(tǒng)中,進(jìn)程管理是內(nèi)核的核心功能之一,其核心目標(biāo)是通過高效的調(diào)度機(jī)制和進(jìn)程切換技術(shù),實現(xiàn)多任務(wù)并發(fā)執(zhí)行。

關(guān)鍵字: Linux CPU

內(nèi)核是操作系統(tǒng)的核心,它作為應(yīng)用程序與硬件設(shè)備之間的"中間人",負(fù)責(zé)進(jìn)程調(diào)度、內(nèi)存管理、硬件通信和系統(tǒng)調(diào)用等關(guān)鍵功能。Linux和Windows作為全球使用最廣泛的兩大操作系統(tǒng),其內(nèi)核設(shè)計理念、架構(gòu)和運行機(jī)制存在本質(zhì)差異...

關(guān)鍵字: Linux Windows

在Linux系統(tǒng)中,當(dāng)開發(fā)者使用mmap()系統(tǒng)調(diào)用將磁盤文件映射到進(jìn)程的虛擬地址空間時,一個看似簡單的指針操作背后,隱藏著操作系統(tǒng)內(nèi)核與硬件協(xié)同工作的復(fù)雜機(jī)制。這種機(jī)制不僅突破了傳統(tǒng)文件IO的效率瓶頸,更重新定義了內(nèi)存...

關(guān)鍵字: Linux 文件IO 內(nèi)存映射

在Linux驅(qū)動開發(fā)領(lǐng)域,持續(xù)集成與持續(xù)部署(CI/CD)流水線通過自動化流程將代碼變更快速轉(zhuǎn)化為可靠部署,而KernelCI與LTP測試套件的深度集成則成為保障驅(qū)動穩(wěn)定性的關(guān)鍵技術(shù)組合。本文將從原理分析、應(yīng)用場景及實現(xiàn)...

關(guān)鍵字: CICD流水線 Linux
關(guān)閉