我想要一个可以在很长一段时间内执行一百万个异步任务的程序。我想动态管理并发,但是我们可以想象使用并发20的简单版本。
我制作了一个对每个异步任务都使用tokio::task::spawn
的系统。 tokio::task::spawn
需要具有Future
生存期的'static
。如果我以某种方式使我的 future 保持静止,那将如何影响我的程序的长期内存消耗?会不会有一些已经等待的 future 的内存积累?还是只有真正会积累的东西才是将来制作'static
的东西?
我可以在每个 future 的某个地方传递静态静态数据(例如&str
)以使 future 成为静态,但在等待之后不保留任何内存吗?我在这里缺少一些核心了解。
最佳答案
回答你的问题
通常,'static
的任何引用在程序的整个生命周期内都有效;仅在main
退出后才释放它。
如果您有许多具有'static
生存期的不同值(即它们并非全部引用一个共享值),则每个值都将占用一定数量的内存。通常,该内存量在程序的整个生命周期中都是恒定的,并且应该很容易解决。
也可以看看:
回答你的问题
关于 future 的任何规定都不需要您必须具有
'static
生存期。您所引用的是泛型类型的约束,该泛型表明存在的任何引用都必须具有static
生存期。这并不意味着需要引用。而是使用拥有的值。也可以看看:
关于asynchronous - 静态生命周期如何影响长期内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60953608/