在Rust中tokio::spawn和tokio::task::spawn_blocking的区别
2026/6/25 15:32:59 网站建设 项目流程

Tokio是一个M:N协程的异步运行时库,IO 风格是Reactor.

一个常见的误解: 异步等于多线程=>线程等于可以运行阻塞任务=>异步可以运行阻塞代码
Tokio运行时主要的目的就是用异步运行业务逻辑,来避免大量的无意义的轮询操作,需要等待时挂起任务(await),执行其他的业务逻辑代码,提高业务逻辑代码的执行效率。

tokio::spawn 函数会将异步任务放入tokio运行时中和其他异步任务进行交错执行,但spawn是不能用来执行阻塞操作的。

tokio要求所有spawn内的代码不能是长时间阻塞的,会阻塞整个工作线程池,不阻塞才能确保业务逻辑代码高效切换异步运行,而main函数也是运行在一个spawn内。理论上来说,非运行在spawn_blocking的代码都是spawn的主业务逻辑代码,而Tokio运行时就是为了让业务代码异步且高效密集运行的库,通过await的不断切换来实现。


tokio::task::spawn_blocking Tokio 会将这些任务交给一个独立的、专门用于处理阻塞任务的线程池去执行。这个线程池和异步工作线程池是分开的,可以运行阻塞任务。



需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询