“静态寿命”如何影响长期记忆?
How does the 'static lifetime influence long term memory?
我想要一个可以长时间执行一百万个异步任务的程序。我想动态管理并发,但我们可以想象并发 20 的更简单版本。
我制作了一个系统,该系统使用 tokio::task::spawn
处理每个异步任务。 tokio::task::spawn
需要生命周期为 'static
的 Future
。如果我以某种方式使我的期货静态,这将如何影响我的程序长期内存消耗?已经等待的未来会不会有一些记忆积累?或者只有真正积累的东西才是创造未来的东西 '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?
我想要一个可以长时间执行一百万个异步任务的程序。我想动态管理并发,但我们可以想象并发 20 的更简单版本。
我制作了一个系统,该系统使用 tokio::task::spawn
处理每个异步任务。 tokio::task::spawn
需要生命周期为 'static
的 Future
。如果我以某种方式使我的期货静态,这将如何影响我的程序长期内存消耗?已经等待的未来会不会有一些记忆积累?或者只有真正积累的东西才是创造未来的东西 '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?