< 返回版块

sxstd001 发表于 2023-07-01 22:52

Tags:tokio

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(())
}

评论区

写评论
作者 sxstd001 2023-07-03 20:56

thanks;

👇
aj3n: https://docs.rs/tokio/latest/tokio/task/fn.yield_now.html

有些task可以make progress的时候返回了pending,等待runtime下次循环poll; 如果这次循环有这种task存在,park即刻返回不死等;

aj3n 2023-07-03 17:57

https://docs.rs/tokio/latest/tokio/task/fn.yield_now.html

有些task可以make progress的时候返回了pending,等待runtime下次循环poll; 如果这次循环有这种task存在,park即刻返回不死等;

1 共 2 条评论, 1 页