【发布时间】:2021-03-18 13:38:07
【问题描述】:
我有一个基于tokio 的单线程异步应用程序,其中使用Arcs 或其他Sync 类型似乎是一种开销。因为线程之间不需要同步,所以我正在寻找类似tokio::sync::oneshot::channel、Sender和Receiver的东西,其中应该是!Sync,并且可以包装成Rc而不是Arc。
是否有任何特制的同步原语用于 Rust 中的单线程异步应用程序?
【问题讨论】:
-
我不确定您是否了解您所指的同步工具。
Arc通常开销很低——它只是一个引用计数的智能指针,唯一的开销是克隆/删除时的原子增量/减量。除非您在热循环中创建它们,否则它不会对性能产生太大影响。一次性通道在内部使用Arc,因此您不太可能通过使用它们而不是Arc来提高性能。 -
@apetranzilla 好吧,热循环很可能是一个用例,如果我不需要原子操作,为什么要为它们付费?
-
如果没有看到您的更多用例,我们无法提供任何建议。你有一些示例代码吗?
-
@apetranzilla 当然。我将制作简短的示例来演示问题并更新问题(这可能需要一些时间)
-
@kmdreko Tokio 也有 LocalSet 我正在成功使用。
标签: asynchronous rust rust-tokio