v8 - v8::Isolate 和 v8::Context 之间到底有什么区别?

标签 v8 embedded-v8

V8 中这些对象之间有什么区别/联系?上下文是否“属于”隔离,反之亦然?

我知道单个 Isolate 一次只能被一个线程访问(我猜这就是 v8::Locker 的用途?)。

我已经浏览了文档,但我似乎无法掌握这些概念 - 感谢任何帮助!

最佳答案

我确信以下是一种简化,但它对我有用。

isolate是V8运行时的独立副本,包括堆管理器、垃圾收集器等。一次只有一个线程可以访问给定的isolate,但不同的线程可以访问不同的isolate同时隔离。

但是,隔离不足以运行脚本。您还需要一个全局(根)对象。 上下文通过将isolate堆中的对象指定为全局对象来定义完整的脚本执行环境。

因此,许多上下文不仅可以“存在”在给定的隔离中,而且还可以轻松安全地共享其任何或所有对象。这是因为它们的对象实际上属于isolate,并受到isolate 的独占锁的保护。

关于v8 - v8::Isolate 和 v8::Context 之间到底有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383724/

相关文章:

javascript - 回调在javascript引擎中是如何实现的? (不是关于如何使用回调)

javascript - node.js 与客户端 Javascript(与 Chrome/V8 相比)相比是否具有任何性能优势?

c++ - v8::Isolate::New 空访问冲突

c++ - 与纯 V8 相比,NodeJS 是否有任何性能缺陷或显着开销?

JavaScript - 为什么使用初始参数调用函数更快?

c++ - 在类中包装 V8 时出现段错误?

c++ - 无法将 'v8::MaybeLocal<v8::String>' 转换为 'v8::Local<v8::Value>'

c++ - 从带有非 ASCII 字符的 wchar_t 创建 v8::String 的安全方法是什么?

c++ - 在 v8 中检测无限递归

c++ - 在 V8 中使用访问器的问题