我与 tokio 合作很多,并且一直在使用spawn_blocking来处理将阻塞线程的代码。然后我看到了block_in_place的文档,它似乎是前者的无限制(发送,'静态)版本。
我的问题是,如果我已经在线程运行时,什么时候不建议使用 block_in_place ?每种驱动同步码的方法有什么区别和优点?如果我多次阻塞(例如同时在所有线程中),这会是一个问题吗?它是如何工作的?
我阅读了所有的 tokio 文档,但没有找到这些问题的答案,所以感觉在这里问是正确的。
如果可以使用spawn_blocking,就使用它。
block_in_place限制较少,因为它不要求其参数具有'static生命周期,但有两个缺点。首先,它使执行器执行额外的工作以将其他任务移出线程。其次,它阻止在同一任务上运行其他 future,这意味着将future 与其他 future连接起来 block_in_place是没有意义的。
如果我多次阻塞(例如同时在所有线程中),这会是一个问题吗?它是如何工作的?
您可以阅读以下的实现block_in_place
block_in_place除了额外的开销之外,大量使用不是问题。它在执行内部传递的函数之前进行内部调用spawn_blocking
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |