You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeRTOS同核多任务调度:任务延迟被超后的调度行为问题

问题描述

假设在同一内核上启动了Task 1与Task 2两个任务,调度器优先运行Task 1,Task 1调用vTaskDelay(100 / portTICK_PERIOD_MS)进入阻塞态,调度器随后切换至就绪态的Task 2运行,但Task 2执行需耗时200ms,此时Task 1会出现哪种情况:

  • 调度器在100ms到后阻塞Task 2,切回Task 1执行
  • 调度器持续运行Task 2至完成再切回Task 1,导致Task 1实际延迟大于100ms

曾尝试将Task 2阻塞时长设为超过Task 1的延迟时间,未复现预期现象。

补充测试:Task 1优先级高于Task 2场景

Task 1因优先级更高首先执行,运行中调用100ms延迟接口进入阻塞态;调度器周期性轮询所有任务状态,发现Task 1阻塞、Task 2就绪,便切换至Task 2运行;100ms延迟时间到后,调度器检测到Task 1进入就绪态,由于其优先级高于当前运行的Task 2,便阻塞Task 2切回Task 1执行;待Task 1运行完成后,调度器再切换回就绪态的Task 2继续执行。

调度逻辑说明

该调度逻辑依托任务通知机制:任务调用延迟接口时进入阻塞态,延迟时间到后收到通知进入就绪态;调度器会周期性检查任务状态,若发现优先级高于当前运行任务的就绪态任务,便会抢占当前任务,切换至高优先级任务执行。

最终结论
  • a) 仅当Task 1优先级高于Task 2时,调度器会在100ms到后阻塞Task 2切回Task 1
  • b) 仅当Task 1与Task 2优先级相同时,调度器会执行完Task 2再切回Task 1,导致Task 1实际延迟大于100ms

内容的提问来源于stack exchange,提问作者Georgi Peev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:06:02