蜘蛛猴是线程安全的是什么意思
What does it mean that SpiderMonkey is threadsafe?
我可以将SpiderMonkey构建为一个库,并将其用作C++应用程序中的Javascript引擎。
在文档中指定了SpiderMonkey是线程安全的,但是这意味着什么,因为Javascript/Ecmascript目前甚至没有线程模型。什么样的呼唤或表达方式被定性为"安全"的这句话关于蜘蛛猴?这只是一段C++代码,从任何C++线程调用任何JS功能到Javascript虚拟机?
库的线程安全意味着库可以在多线程环境中使用。SpiderMonkey库可以集成到多线程C++应用程序中。这与JavaScript语言模型无关。
但是,某些规则和限制适用。这些规则令人困惑,因为它们已经从一个版本的库更改为另一个版本,并且文档过去和现在都不是很清楚。文档页面通常显示如下注释:"自此弃用..."或"草稿正在进行...",或"未找到 404"。
从壁虎12.0或蜘蛛猴24开始,规则是:
- JSRuntime是单线程的。您只能从一个线程使用它
- 要同时从多个线程调用库 API,请使用多个 JSRuntimes
- 在JS_THREADSAFE构建中,许多 JSAPI 函数只能调用从请求中(JS_THREADSAFE现在永久打开)
- 将 API 调用与JS_BeginRequest、JS_EndRequest函数或使用 JSAutoRequest 类
- 垃圾收集器挂起所有其他调用 SpiderMonkey 的线程。若要将等待时间降至最低,请避免长时间运行的请求。不要在JS_BeginRequest、JS_EndRequest块中包含阻塞 I/O 或耗时的计算。
您可以考虑构建 SpiderMonkey 的调试版本来测试您的集成。尝试使用标志:
--enable-root-analysis --enable-debug --disable-optimize
这些在库代码中添加断言,以帮助更早地捕获线程(垃圾回收器和内存)相关问题。
对于您的C++应用程序,它是线程安全的。您可以从C++代码中的多个线程使用该库,而无需担心锁定数据结构等。
在这种情况下,库做什么无关紧要(在您的情况下,执行 JS 代码)。重要的是库本身可以在多线程环境中使用。
来自维基百科:
在以下情况下,实施保证没有竞争条件 由多个线程同时访问。
在维基百科中阅读有关线程安全的更多信息。
相关文章:
- @@(“at at”)在ES6 JavaScript中是什么意思
- minimy javascript是什么意思?Backbone.js
- var w = q||问2;这个表达式是什么意思
- 函数(i,val)在javascript中是什么意思
- 问号在这段代码中是什么意思
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- ||{}在javascript中是什么意思
- “转义字符串”在Regex中是什么意思?(Javascript)
- 这个代码是什么意思(history.replaceState和history.pushstate)
- :: 是什么意思
- 这是什么意思?getData([renderData]);
- MDN文档中关于弄清楚XUL元素的段落是什么意思:“如何将覆盖扩展转换为无重启”
- require('file_path')后面的后缀(模块)在javascript文件中是什么意思
- Twitter Bootstrap的Tab插件中“data-api”是什么意思
- 箭头函数 '() => {}' 在 Javascript 中是什么意思?
- 在这种情况下,“foo[x]”是什么意思?
- 在 http 请求中添加事件侦听器 ( request.on ) 是什么意思?而笏就是它的用途
- 这种格式是什么意思 T00:00:00.000Z
- 这行是什么意思“ operator.indexOf(btnVal) > -1”
- JQuery:这段代码是什么意思