gpt4 book ai didi

rust - 在 Rust 程序中同时使用 libnative 和 libgreen

转载 作者:行者123 更新时间:2023-11-29 08:13:01 26 4
gpt4 key购买 nike

我目前正在设计一个流程,我必须在其中生成很多 任务。这是我做出的一个概念选择,因为我知道这在 Rust 中是可能的。然而,自从默认采用 1:1 模型以来,关于 Rust 可以生成“数十万个任务”的说法已经消失。

我的问题很简单:是否可以为非 IO 生成绿色任务、为 IO 操作生成轻型任务和 native 任务?

感谢您的宝贵时间。

最佳答案

green crate 仍然存在,如果你想通过 libuv 生成“绿色线程”。但您可能不想这样做。

问题归结为 Rust 如何处理堆栈,以及它如何检测溢出。最初,Rust 使用拆分堆栈,这意味着它可以分配非常小的堆栈,因此每个绿色线程使用的内存非常少。通过显式检查检测到溢出。

问题是,事实证明这是非常低效的。更糟糕的是,它甚至使 native 线程变慢,因为代码不知道它将在哪个线程上运行。因此,Rust 放弃了保护页的拆分堆栈。也就是说,在捕获无效访问的线程堆栈下方总是有一个额外的 4K 空页面。

然而,这就是 native 线程堆栈的工作方式。因此,当更改进行时,绿色线程突然像普通线程一样内存效率低下,并且给 Rust 带来了一个大的运行时组件。

因此,为什么 green 被删除并变成一个常规的外部库。您仍然可以使用它,但是您现在还不清楚什么时候想使用它。

作为比较点,Go 最近或即将进行相同的更改。

至于“成百上千的任务”,现在的说法是,如果你想那样做,在64位环境中运行,惰性内存映射会使问题消失。希望。

编辑:作为附录,如果 Rust 确实在未来获得非常节省内存的“任务”,我个人会关注 Python 3 风格的生成器. Rust 没有很好的方法来做它们,但这就是我要花钱的地方......

关于rust - 在 Rust 程序中同时使用 libnative 和 libgreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27039768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com