首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您什么时候应该使用Tokio的`spawn_blocking`?

您什么时候应该使用Tokio的`spawn_blocking`?
EN

Stack Overflow用户
提问于 2022-11-23 13:26:13
回答 1查看 52关注 0票数 1

task文档中,有一节讨论如何在异步中调用阻塞代码,以及如何避免这种调用,以免过多地阻塞异步线程(https://docs.rs/tokio/1.21.2/tokio/task/index.html#blocking-and-yielding)。

它还讨论了如何将tokio::task::spawn_blocking用于这些任务,但我想知道在什么时候建议将工作发送到不同的线程?我目前正在编写一个程序,它可以恢复大量ecdsa签名,每条消息大约需要100微秒,所有这些都是在做大量网络IO时使用的。作为一个具体的例子,这是否足以使用像spawn_blocking这样的东西

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 13:49:09

Alice ( Tokio之一)在异步代码阻塞方面有一个很好的博客帖子

你的问题的一个关键部分是:

为了给出时间有多长的感觉,一个好的经验法则是每个.await之间的时间不超过10到100微秒。也就是说,这取决于您正在编写的应用程序的类型。

考虑到您在每条消息中花费100微秒,我认为您可能会达到这样的程度:移动到另一个线程是正确的选择。

文章还给出了如何将工作转移到不同线程上的经验规则:

  • 对于同步IO,请使用spawn_blocking
  • 对于CPU范围内的计算,请使用单独的分叉连接线程池(如rayon )。
  • 对于永久运行的同步工作(例如侦听数据库连接),可以生成自己的专用线程,以避免将线程从Tokio/Rayon池中删除。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74547541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档