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 会将这些任务交给一个独立的、专门用于处理阻塞任务的线程池去执行。这个线程池和异步工作线程池是分开的可以运行阻塞任务。
在Rust中tokio::spawn和tokio::task::spawn_blocking的区别
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 会将这些任务交给一个独立的、专门用于处理阻塞任务的线程池去执行。这个线程池和异步工作线程池是分开的可以运行阻塞任务。