节点 WASI 与生成子进程

问题描述 投票:0回答:2

NodeJS 文档 中声明如下:

WASI API 提供了 WebAssembly 系统接口规范的实现。 WASI 通过一系列类似 POSIX 的函数使沙盒 WebAssembly 应用程序能够访问底层操作系统。

我的问题是:

使用 WASI API 的最大好处是什么,比如说,生成一些其他子进程或运行非 Nodejs 代码的类似方法

我不得不假设它比生成子进程或使用一些带有本机 API 绑定的 C 代码更快。

也许我只是误解了 WASI 背后的整个想法,这是有道理的,因为 WASM 如此令人惊叹的部分原因是能够在网络上使用服务器端、成熟的编程语言(大部分),就像所有我们在 Go/Rust 中见过的疯狂工具。

这是否更有利于在节点中原生运行 WASM,如果是的话,与运行子进程相比有什么好处?

node.js webassembly wasi
2个回答
0
投票
我最终从这里删除的帖子中得到了答案。

从真正高层次的角度来说,WASI 只是 WASM 的(系统)接口。

我最终找到了

this简短的“文章”,如果你愿意的话,也非常有帮助!

正如 WebAssembly 是概念机器的汇编语言一样,WebAssembly 需要一个概念操作系统的系统接口,而不是任何单个操作系统。这样,它就可以在所有不同的操作系统上运行。

这就是 WASI  ——WebAssembly 平台的系统接口。


0
投票
目前

最大的好处是跨平台支持。您不需要为您支持的每个平台编译您的子进程;只需为 WASM/WASI 编译一次即可。 将来它也将更加安全,因为那时该过程是正确的沙箱。然而显然 Node 还没有沙箱 WASI 文件系统访问。

速度是 WASM/WASI 的主要

缺点

。它比原生慢大约 2 倍。 其他大缺点:

尚无多线程支持。
  • 无法使用本机操作系统 API(如果它不在 WASI 中,你就完蛋了)。
  • 这是实验性的。
  • 它是沙盒的(有时你不想要这样)。
  • 许多缺失的功能,例如很难捕获标准输出。
© www.soinside.com 2019 - 2024. All rights reserved.