Below you will find pages that utilize the taxonomy term “Tokio”
November 17, 2025
理解 tokio 中的 Task
"\u003ch2 id=\"什么是-task\"\u003e什么是 Task\u003c/h2\u003e\n\u003cp\u003e在 tokio 里, task 是一种轻量级、非阻塞的执行单元,它类似于操作系统线程,但对它的调度不是由操作系统来完成的,而是 tokio runtime 来完成的。这种通用的模式,还有一个名称就是 \u003ca href=\"https://en.wikipedia.org/wiki/Green_threads\"\u003egreen threads\u003c/a\u003e。它很类似于 \u003ca href=\"https://tour.golang.org/concurrency/1\"\u003eGo’s goroutines\u003c/a\u003e, \u003ca href=\"https://kotlinlang.org/docs/reference/coroutines-overview.html\"\u003eKotlin’s coroutines\u003c/a\u003e, or \u003ca href=\"http://erlang.org/doc/getting_started/conc_prog.html#processes\"\u003eErlang’s processes\u003c/a\u003e。\u003c/p\u003e\n\u003cp\u003e它有三个主要特点,分别是 \u003ccode\u003e轻量级\u003c/code\u003e、\u003ccode\u003e协作式调度\u003c/code\u003e 和 \u003ccode\u003e非阻塞\u003c/code\u003e。\u003c/p\u003e\n\u003ch3 id=\"轻量级\"\u003e轻量级\u003c/h3\u003e\n\u003cp\u003e与Golang里的 goroutine一样,相比操作系统线程而言,它的创建速度非常的快,且很小。对它的调用完成是由用户态代码来完成的。不像操作系统线程那样,每一次调度都需要上下文的切换,因此在用户态切换任务的成本也是极其的低。同样对于它的运行与销毁也是低成本的。\u003c/p\u003e\n\u003ch3 id=\"协作式调度\"\u003e协作式调度\u003c/h3\u003e\n\u003cp\u003e多数操作系统实现的是\u003ccode\u003e抢占式多任务处理\u003c/code\u003e,对于多任务调度一般是由调度器(如操作系统调度器)来负责的,它会根据任务的执行时长,动态的抢占并暂停它,然后执行其它任务,最终实现每个任务都在同步执行的样子。\u003c/p\u003e\n\u003cp\u003e但 tokio 属于 \u003ccode\u003e协作式调度\u003c/code\u003e 机制, …\u003c/p\u003e"