如何将 v8::FunctionCallbackInfo<v8::Value> 数组从一个隔离区复制到另一个隔离区?
How to copy v8::FunctionCallbackInfo<v8::Value> array from one isolate to another?
在我的项目中,我有多个线程,它们有自己的 V8 隔离。所以目前我不需要任何 v8::Lockers 任何地方。但是现在我想实现一个可以异步执行其他脚本的函数"execute":
Thread1: execute("script1", "param1"); execute("script2", {param1:
"param1", param2: 5});
Thread2: executes script1
Thread3: executes script2
到目前为止一切顺利...但现在我想跨 isolate 传递 V8 参数。那么有什么方法可以将 v8::FunctionCallbackInfo 参数数组从一个 isolate 传递到另一个 isolate 吗?
在我当前的体系结构中,我不需要任何 v8:Lockers,因此无需在我的整个代码库中使用它们的解决方案将是首选。
这里是 V8 开发人员。 v8::Values 通常与一个分离株相关。在另一个 isolate 中使用它们的唯一方法是在那里创建一个相应的值。根据您的要求,您可以直接复制它们(通过 属性 遍历对象,属性,并在第二个隔离中创建匹配对象),或在两者之间使用序列化格式(JSON,或 StructuredClone,或您自己定义的内容)。
技术背景是每个隔离区都有一个垃圾收集堆,这些值存储在该堆上。一个 isolate 不能访问另一个 isolate 的堆,所以它需要它自己的任何它想使用的对象的副本。它们被称为 "isolates" 是因为它们彼此隔离 ;-)
在我的项目中,我有多个线程,它们有自己的 V8 隔离。所以目前我不需要任何 v8::Lockers 任何地方。但是现在我想实现一个可以异步执行其他脚本的函数"execute":
Thread1: execute("script1", "param1"); execute("script2", {param1: "param1", param2: 5});
Thread2: executes script1
Thread3: executes script2
到目前为止一切顺利...但现在我想跨 isolate 传递 V8 参数。那么有什么方法可以将 v8::FunctionCallbackInfo 参数数组从一个 isolate 传递到另一个 isolate 吗?
在我当前的体系结构中,我不需要任何 v8:Lockers,因此无需在我的整个代码库中使用它们的解决方案将是首选。
这里是 V8 开发人员。 v8::Values 通常与一个分离株相关。在另一个 isolate 中使用它们的唯一方法是在那里创建一个相应的值。根据您的要求,您可以直接复制它们(通过 属性 遍历对象,属性,并在第二个隔离中创建匹配对象),或在两者之间使用序列化格式(JSON,或 StructuredClone,或您自己定义的内容)。
技术背景是每个隔离区都有一个垃圾收集堆,这些值存储在该堆上。一个 isolate 不能访问另一个 isolate 的堆,所以它需要它自己的任何它想使用的对象的副本。它们被称为 "isolates" 是因为它们彼此隔离 ;-)