【问题标题】:Efficient synchronization primitives for a single-threaded async app in RustRust 中单线程异步应用程序的高效同步原语
【发布时间】:2021-03-18 13:38:07
【问题描述】:

我有一个基于tokio 的单线程异步应用程序,其中使用Arcs 或其他Sync 类型似乎是一种开销。因为线程之间不需要同步,所以我正在寻找类似tokio::sync::oneshot::channelSenderReceiver的东西,其中应该是!Sync,并且可以包装成Rc而不是Arc

是否有任何特制的同步原语用于 Rust 中的单线程异步应用程序?

【问题讨论】:

  • 我不确定您是否了解您所指的同步工具。 Arc 通常开销很低——它只是一个引用计数的智能指针,唯一的开销是克隆/删除时的原子增量/减量。除非您在热循环中创建它们,否则它不会对性能产生太大影响。一次性通道在内部使用 Arc,因此您不太可能通过使用它们而不是 Arc 来提高性能。
  • @apetranzilla 好吧,热循环很可能是一个用例,如果我不需要原子操作,为什么要为它们付费?
  • 如果没有看到您的更多用例,我们无法提供任何建议。你有一些示例代码吗?
  • @apetranzilla 当然。我将制作简短的示例来演示问题并更新问题(这可能需要一些时间)
  • @kmdreko Tokio 也有 LocalSet 我正在成功使用。

标签: asynchronous rust rust-tokio


【解决方案1】:

您可以查看futures-intrusive 中的各种Local 类型。例如。 LocalOneshotChannel 不需要互斥体。

【讨论】:

  • 谢谢你,这是你写的一个非常有趣的包!我打算稍后做一些测试和比较,并更新问题以发布结果。
猜你喜欢
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多