asynchronous - 静态生命周期如何影响长期内存?

标签 asynchronous rust rust-tokio

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

我制作了一个对每个异步任务都使用tokio::task::spawn的系统。 tokio::task::spawn需要具有Future生存期的'static。如果我以某种方式使我的 future 保持静止,那将如何影响我的程序的长期内存消耗?会不会有一些已经等待的 future 的内存积累?还是只有真正会积累的东西才是将来制作'static的东西?

我可以在每个 future 的某个地方传递静态静态数据(例如&str)以使 future 成为静态,但在等待之后不保留任何内存吗?我在这里缺少一些核心了解。

最佳答案

回答你的问题

通常,'static的任何引用在程序的整个生命周期内都有效;仅在main退出后才释放它。

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

也可以看看:

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

  • 回答你的问题

    关于 future 的任何规定都不需要您必须具有'static生存期。您所引用的是泛型类型的约束,该泛型表明存在的任何引用都必须具有static生存期。这并不意味着需要引用。而是使用拥有的值。

    也可以看看:
  • What does the 'static lifetime mean in a trait bound in a Rust future?
  • The compiler suggests I add a 'static lifetime because the parameter type may not live long enough, but I don't think that's what I want
  • Thread references require static lifetime?
  • 关于asynchronous - 静态生命周期如何影响长期内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60953608/

    相关文章:

    c# - 在这个函数中放在哪里等待?

    rust - 使用枚举对结构进行分组

    asynchronous - 是否可以在不消耗其输出的情况下检查 future 是否准备就绪?

    concurrency - 如何使用 Rust 和 Tokio 构建多个并发服务器?

    c# - 如何将 await/async 与同步代码一起使用?

    c++ - C++中的Google Cloud Pubsub异步流API

    unit-testing - Cargo 未在顶级文件中运行测试

    rust - 是否可以创建一个自定义派生来防止编译时类型之间的循环?

    rust - 当只需要部分结构时,如何避免克隆整个大型结构以发送给线程?

    php - 使用 php 进行异步 http 调用