在我的项目中,我有多个线程具有各自的V8隔离。所以目前我在任何地方都不需要任何v8 :: Lockers。但是现在我想实现一个“执行”功能,该功能可以异步执行其他脚本:
线程1:execute(“ script1”,“ param1”); execute(“ script2”,{param1: “ param1”,param2:5});
线程2:执行脚本1
线程3:执行脚本2
到目前为止很好...但是现在我想跨隔离区传递V8参数。那么有什么方法可以将v8 :: FunctionCallbackInfo参数数组从一个隔离区传递给另一个隔离区?
在我当前的体系结构中,我不需要任何v8:Lockers,因此首选解决方案,而不必在我的整个代码库中使用它们。
答案 0 :(得分:1)
V8开发人员在这里。 v8 ::值通常与一个隔离符相关。在另一个隔离中使用它们的唯一方法是在其中创建一个相应的值。根据您的要求,您可以直接复制它们(在对象,属性之间逐个迭代,并在第二个隔离区中创建匹配的对象),也可以使用介于两者之间的序列化格式(JSON或StructuredClone或您自己定义的某种格式) )。
技术背景是每个隔离区都有一个垃圾回收堆,这些值存储在该堆中。一个隔离区无法访问另一个隔离区的堆,因此它需要它自己要使用的任何对象的副本。它们之所以被称为“隔离”是因为它们彼此是隔离的;-)