如何将v8 :: FunctionCallbackInfo <v8 :: value>数组从一个隔离复制到另一个?

时间:2018-08-10 09:51:24

标签: c++ v8

在我的项目中,我有多个线程具有各自的V8隔离。所以目前我在任何地方都不需要任何v8 :: Lockers。但是现在我想实现一个“执行”功能,该功能可以异步执行其他脚本:

  

线程1:execute(“ script1”,“ param1”); execute(“ script2”,{param1:   “ param1”,param2:5});

     

线程2:执行脚本1

     

线程3:执行脚本2

到目前为止很好...但是现在我想跨隔离区传递V8参数。那么有什么方法可以将v8 :: FunctionCallbackInfo参数数组从一个隔离区传递给另一个隔离区?

在我当前的体系结构中,我不需要任何v8:Lockers,因此首选解决方案,而不必在我的整个代码库中使用它们。

1 个答案:

答案 0 :(得分:1)

V8开发人员在这里。 v8 ::值通常与一个隔离符相关。在另一个隔离中使用它们的唯一方法是在其中创建一个相应的值。根据您的要求,您可以直接复制它们(在对象,属性之间逐个迭代,并在第二个隔离区中创建匹配的对象),也可以使用介于两者之间的序列化格式(JSON或StructuredClone或您自己定义的某种格式) )。

技术背景是每个隔离区都有一个垃圾回收堆,这些值存储在该堆中。一个隔离区无法访问另一个隔离区的堆,因此它需要它自己要使用的任何对象的副本。它们之所以被称为“隔离”是因为它们彼此是隔离的;-)