“静态寿命”如何影响长期记忆?

How does the 'static lifetime influence long term memory?

我想要一个可以长时间执行一百万个异步任务的程序。我想动态管理并发,但我们可以想象并发 20 的更简单版本。

我制作了一个系统,该系统使用 tokio::task::spawn 处理每个异步任务。 tokio::task::spawn 需要生命周期为 'staticFuture。如果我以某种方式使我的期货静态,这将如何影响我的程序长期内存消耗?已经等待的未来会不会有一些记忆积累?或者只有真正积累的东西才是创造未来的东西 'static?

我能否将像 &str 这样的虚拟静态数据传递给每个未来,使未来成为静态的,但在等待之后不保留任何记忆?我在这里缺少一些核心理解。

回答您的问题

一般来说,任何 'static 的引用都会在程序的整个生命周期内存在;它仅在 main 退出后才被释放。

如果您有许多具有 'static 生命周期的不同值(即它们并非都引用一个共享值),每个值都会占用一定量的内存。通常,内存量在程序的整个生命周期中都是恒定的,应该很容易计算。

另请参阅:

  • How to convert a String into a &'static str

正在回答您的问题

关于期货,没有什么要求您必须有 'static 生命周期。您所引用的是泛型类型的界限,它声明任何 references 存在必须具有 static 生命周期。这并不意味着需要参考。相反,使用拥有的值。

另请参阅:

  • What does the 'static lifetime mean in a trait bound in a Rust future?