Asynchronous 使用异步Tokio代码中的std::sync::Mutex

Asynchronous 使用异步Tokio代码中的std::sync::Mutex,asynchronous,rust,rust-tokio,Asynchronous,Rust,Rust Tokio,我正在使用基于异步/等待的Tokio和Rust 1.39.0实现一个功能。我知道在异步上下文中使用常规的互斥体会对性能产生影响,但是还有其他可能的影响吗?例如,我记得在某个地方读到它可以锁定线程池/运行时或挂起系统 对于上下文,系统的其余部分是以同步方式编写的。我正在考虑使用最新的Tokio实现面向网络的部分,它将使用Tokio::sync::Mutex和friends。异步网络组件可能会调用尝试获取sync::Mutex的同步部分 一些选择: 通过消息传递分离这些部分 将系统其余部分更改为异步

我正在使用基于异步/等待的Tokio和Rust 1.39.0实现一个功能。我知道在异步上下文中使用常规的
互斥体会对性能产生影响,但是还有其他可能的影响吗?例如,我记得在某个地方读到它可以锁定线程池/运行时或挂起系统

对于上下文,系统的其余部分是以同步方式编写的。我正在考虑使用最新的Tokio实现面向网络的部分,它将使用
Tokio::sync::Mutex
和friends。异步网络组件可能会调用尝试获取
sync::Mutex
的同步部分

一些选择:

  • 通过消息传递分离这些部分
  • 将系统其余部分更改为异步感知,这将是一项艰巨的任务

  • 如果可能的话,我想避免这两种情况。

    您的问题似乎可以用的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将此问题标记为已回答。感谢链接,提供了良好的背景。讨论的重点是长期运行操作的阻塞。我的情况略有不同,但仍然是关于阻塞的:在同步锁上阻塞。代码被设计为在最短的时间内保存这些线程(例如,在锁定状态下更新哈希映射)。因此,如果我们确保每CPU执行器线程不阻塞(或在短/合理的时间内阻塞),那么IIUC就可以了。这个断言听起来正确吗?