创建不同的 v8 上下文,它们是另一个上下文的克隆

mar*_*964 6 c++ multithreading v8 embedded-v8

使用 Google 的 v8 c++ 库,我想创建一个上下文,其中定义了多个模板、变量和全局变量,并准备好供代码中的多个地方使用,这些地方可能运行在不同的线程上,每个地方都有自己的隔离,它们也应该在这里每个线程都有自己的本地上下文副本,因此对一个线程中全局变量的任何更改都不会影响其他线程。

每次我想要一个新的上下文时,我都可以通过显式设置我的所有模板、变量和全局变量来做到这一点,但我想知道是否有更有效的方法。假设我已经有一个代表主状态的全局 v8::Isolate 指针和 v8::Persistent。如果我想在自己的线程中创建一个全新的隔离,并创建一个本质上是 master 克隆的新上下文,那么我需要做什么?我知道我可以在对 master 的访问周围包装一个互斥锁,以确保不同的线程在必要时不会同时访问它。我只是不知道如何有效地将在一个隔离中创建的信息复制到另一个隔离中,而无需从头开始重新创建其全部内容。

smi*_*off 2

您不能在隔离之间共享对象。从这里

Isolate 表示 V8 引擎的隔离实例。V8 分离株具有完全独立的状态。来自一个隔离区的对象不得在其他隔离区中使用。嵌入器可以创建多个隔离并在多个线程中并行使用它们。在任何给定时间最多可以有一个线程进入隔离。必须使用Locker/Unlocker API 进行同步。