tokio线程主循环中的did_defer_tasks()是判断什么的? 什么情况下会返回ture?
// M执行逻辑:
fn run(&self, mut core: Box<Core>) -> RunResult {
while !core.is_shutdown {
// 计数++;
core.tick();
// 维护
core = self.maintenance(core);
// 读取任务: 1/61全局队列 > 槽 > 本地队列;
if let Some(task) = core.next_task(&self.worker) {
core = self.run_task(task, core) ?;
continue;
}
// 窃取;
if let Some(task) = core.steal_work(&self.worker) {
core = self.run_task(task, core)?; // 窃取成功: 执行任务 + 关闭寻找态;
}
// (窃取失败:保持寻找态) || 不参与窃取(:正常态)
else {
// Wait for work
core = if did_defer_tasks() { // 问: 这里是什么?
// 不阻塞:
self.park_timeout(core, Some(Duration::from_millis(0)))
} else {
// 阻塞等待;
self.park(core)
};
}
}
// 准备关闭逻辑;
core.pre_shutdown(&self.worker);
// Signal shutdown
// 关闭;
self.worker.handle.shutdown_core(core);
Err(())
}
1
共 2 条评论, 1 页
评论区
写评论thanks;
👇
aj3n: https://docs.rs/tokio/latest/tokio/task/fn.yield_now.html
有些task可以make progress的时候返回了pending,等待runtime下次循环poll; 如果这次循环有这种task存在,park即刻返回不死等;
https://docs.rs/tokio/latest/tokio/task/fn.yield_now.html
有些task可以make progress的时候返回了pending,等待runtime下次循环poll; 如果这次循环有这种task存在,park即刻返回不死等;