所以代码里如果不可避免的有(少量的)阻塞调用, 就要为 runtime 启动更多的 worker 线程, 保证存在没被阻塞的 worker 来执行待调度的 task, 以避免整个tokio runtime...原因是 tokio 里的待执行 task 不是简单的放到一个queue里, 除了 runtime 内共享的, 可被每个 worker 消费的 run_queue[2], 每个 worker 还有一个自己的...-1 本地的 lifo_slot.
• Future f2 在 runtime-1 执行后返回 Pending, 被放入共享队列 run_queue.
• Future f3 在 runtime-1 中执行..., 它将一个任务 f4 交给其他的 runtime 去完成(例如为了隔离网络IO和本地磁盘IO), 使用 block_on(f4)[4] 的方式, 等待执行结果返回.
• f4 中也需要锁 m, 等待....这时, f2 在共享队列 run_queue 中, 可以被执行, 但是 f1 在 worker-1 本地的 lifo_slot 里, 只能由 worker-1 调度, 但 worker-1 当前阻塞在