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

How to copy v8::FunctionCallbackInfo<v8::Value> array from one isolate to another?

本文关键字:隔离 v8 一个 另一个 复制 数组 FunctionCallbackInfo lt Value gt      更新时间:2023-10-16

在我的项目中,我有多个线程,它们有自己的 V8 隔离。所以目前我不需要任何 v8::储物柜。但是现在我想实现一个可以异步执行其他脚本的函数"execute":

Thread1: execute("script1", "param1">

(; execute("script2", {param1: "参数1", 参数2: 5}(;

线程 2:执行脚本 1

线程 3:执行脚本 2

目前为止,一切都好。。。但是现在我想跨隔离区传递 V8 参数。那么有没有办法将 v8::FunctionCallbackInfo 参数数组从一个隔离传递到另一个隔离?

使用我目前的架构,我不需要任何 v8:Lockers,因此最好使用一种无需在整个代码库中使用它们的解决方案。

这里的V8 开发人员。 v8::值通常绑定到一个隔离。在另一个隔离中使用它们的唯一方法是在那里创建相应的值。根据您的要求,您可以直接复制它们(逐个属性循环访问对象,并在第二个隔离中创建匹配的对象(,也可以在两者之间使用序列化格式(JSON 或结构化克隆,或您自己定义的内容(。

技术背景是每个隔离都有一个垃圾回收堆,这些值存储在该堆上。一个隔离无法访问另一个隔离的堆,因此它需要自己的想要处理的任何对象的副本。它们被称为"隔离物",因为它们彼此隔离;-(