在task
文档中,有一节讨论了在异步中调用阻塞代码,以及如何避免这种情况,以免过多地阻塞异步线程(https://docs.rs/tokio/1.21.2/tokio/task/index.html#blocking-and-yielding)。
它还谈到了使用tokio::task::spawn_blocking
来完成这些任务,但我想知道在什么时候建议将工作发送到不同的线程?我目前正在编写一个程序,它恢复大量的ecdsa签名,每个消息大约需要100微秒,同时执行大量的网络IO。作为一个具体的例子,这足以使用像spawn_blocking
这样的东西吗?
1条答案
按热度按时间sgtfey8w1#
Alice Rhyl(时雄开发人员之一)在异步代码中的阻塞方面有很好的blog post。
您的问题的关键部分之一:
为了给予人一种多少时间是太多的感觉,一个好的经验法则是每个等待之间不超过10到100微秒。也就是说,这取决于您编写的应用程序的类型。
考虑到您要为每条消息 * 花费100微秒,我认为您很可能已经到了需要转移到另一个线程的时候了。
这篇文章还提供了一个经验法则,说明如何将工作转移到不同的线程上:
spawn_blocking
。rayon
。