gpt4 book ai didi

javascript - SpiderMonkey 是线程安全的是什么意思?

转载 作者:行者123 更新时间:2023-11-30 03:59:24 25 4
gpt4 key购买 nike

我可以将 SpiderMonkey 构建为一个库,并将其用作我的 C++ 应用程序中的 Javascript 引擎。

在文档中指定 SpiderMonkey 是线程安全的,但这意味着什么,因为 Javascript/Ecmascript 目前甚至没有线程模型。关于 SpiderMonkey 的这句话,什么样的调用或表达是“安全的”?它只是一段 C++ 代码,从任何 C++ 线程调用任何 JS 功能到 Javascript 虚拟机?

最佳答案

库的线程安全性意味着该库可以在多线程环境中使用。 SpiderMonkey 库可以集成到多线程 C++ 应用程序中。这与 JavaScript 语言模型无关。

但是某些规则和限制适用。这些规则令人困惑,因为它们一直在从一个版本的库更改为另一个版本,并且文档过去没有而且仍然不是很清楚。文档页面通常会显示如下注释:“已弃用,因为...”或“草稿正在进行中...”或“未找到 404”。

从 Gecko 12.0 或 SpiderMonkey 24 开始,规则是:

  • JSRuntime 是单线程的。您只能在一个线程中使用它
  • 要一次从多个线程调用库 API,请使用多个 JSRuntime
  • 在 JS_THREADSAFE 构建中,许多 JSAPI 函数只能被调用从请求中(JS_THREADSAFE 现在永久开启)
  • 使用 JS_BeginRequest、JS_EndRequest 函数或使用 JSAutoRequest 类
  • 垃圾收集器暂停调用 SpiderMonkey 的所有其他线程。要将等待时间保持在最低限度,请避免长时间运行的请求。不要在 JS_BeginRequest、JS_EndRequest block 中包含阻塞 I/O 或耗时的计算。

您可以考虑构建一个调试 版本的 SpiderMonkey 来测试您的集成。尝试使用标志:

--enable-root-analysis --enable-debug --disable-optimize

那些在库代码中添加断言以帮助更早地捕获与线程(垃圾收集器和内存)相关的问题。

关于javascript - SpiderMonkey 是线程安全的是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941923/

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