Создание различных контекстов v8, которые являются клонами другого


Используя библиотеку Google v8 c++, я хочу создать контекст, в котором у меня есть несколько шаблонов, переменных и глобалов, определенных и готовых к использованию несколькими местами в коде, которые могут работать в разных потоках, каждый со своей собственной изоляцией, где они также должны иметь свою собственную локальную копию контекста, чтобы любые изменения глобальных переменных в одном потоке не повлияли на другие.

Я могу сделать это, явно настроив все мои шаблоны, переменные и глобалы каждый и каждый раз я хочу новый контекст, но мне интересно, есть ли более эффективный способ. Предположим, что у меня уже есть глобальный указатель v8::Isolate и V8:: Persistent, представляющие основное состояние. Что мне тогда нужно сделать, если я хочу создать совершенно новый изолят в своем собственном потоке и создать новый контекст, который по сути является клоном мастера? Я знаю, что могу обернуть мьютекс вокруг доступа к мастеру, чтобы гарантировать, что различные потоки не обращаются к нему одновременно, если это необходимо. Я просто не знаю. знать, как эффективно копировать информацию, которая была сделана в одном изоляте в другой, не воссоздавая все его содержимое с нуля.

1 3

1 ответ:

Вы не можете совместно использовать объекты между изолятами. Из сюда

Isolate представляет собой изолированный экземпляр двигателя V8. Изоляты V8 имеют совершенно отдельные состояния. Объекты из одного изолята не должны использоваться в других изолятах. Встраиватель может создавать несколько изолятов и использовать их параллельно в нескольких потоках. Изолят может быть введен не более чем одним потоком в любой момент времени. Шкафчик/API-интерфейс приложения должен быть использован для синхронизации.