gpt4 book ai didi

c++ - V8实例化变量的顺序(多线程)

转载 作者:行者123 更新时间:2023-11-28 08:04:42 24 4
gpt4 key购买 nike

我是 Google V8 的新手,我不确定如何充分利用它们提供的变量类型。我将从解释我希望的流程开始:

  1. 我想在主线程中编译 JS 脚本。
  2. 在多个线程中,当我使用 instance->SetAccessor(...) 或 prototype->Set(...) (或任何其他选项,如果有的话)“添加”到上下文不同的信息时,我想运行脚本。

我不确定何时需要执行以下操作:

  • 何时何地创建 v8::handleScope?在主线程中创建一个就足够了吗?还是每个线程都需要一个?
  • 何时何地创建 v8::isolatev8::locker?它应该是每个线程还是不?它应该在 v8::handleScope 之前还是之后?

任何信息都会有所帮助(:

最佳答案

如果你想在没有跨线程共享的情况下从每个线程并行运行脚本,那么每个线程都需要自己的隔离。您可能需要也可能不需要主线程,或者您可以使用默认的隔离。不过,我建议确保在运行任何线程之前已初始化默认隔离,以防万一您的其他线程之一最终初始化了它。如果您使用的是 isolate,您应该没问题,但可以肯定的是它不会造成任何伤害。

如果您需要对象的跨线程共享等,那么您将需要对此进行研究,这可能很困难。甚至不确定 v8 是否真的可以支持它。单独隔离并避免共享对象要容易得多。

您应该能够在用于将要在主线程中执行它的线程的隔离上下文中编译脚本,然后将脚本和隔离传递给线程,并且不会在主线程中再次接触任何一个线程,直到工作线程完成它。这应该可以工作,但我没有检查 v8 是否检查创建隔离的线程 ID 以及它在其中执行的线程 ID。值得编写一个小测试应用程序来检查这是否有效。

另一种选择是在主线程中检查编译并在工作线程中再次编译并将隔离封装在线程中。这是我过去的做法。它更容易但效率较低。

句柄范围应该只在需要它的函数中分配在堆栈上。不要为句柄范围使用全局变量或在堆上分配它。您编译的脚本应该使用持久句柄。进入隔离范围后进入句柄范围。

关于c++ - V8实例化变量的顺序(多线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com