想要了解V8的WorkerThread的用途和数量

时间:2019-05-13 19:16:13

标签: v8 embedded-v8

我有一个非常简单的程序,如下所示,它只是创建一个隔离对象,然后休眠:

#include <libplatform/libplatform.h>
#include <v8-platform.h>
#include <v8.h>

#include <stdio.h>
#include <unistd.h>

using v8::Isolate;

int main() {

   std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
   v8::V8::InitializePlatform(platform.get());
   v8::V8::Initialize();

   v8::Isolate::CreateParams create_params;
   create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
   Isolate* isolate = v8::Isolate::New(create_params);

   printf("Sleeping...\n");
   usleep(1000 * 1000 * 100);
   printf("Done\n");
   return 0;
}

当我运行该程序时,我可以检查该进程使用ps -T -p <process_id>创建的线程数,并且我发现在8核计算机上,v8创建了7个额外的线程,均名为“ V8 WorkerThread”,在我的16核心计算机上,我获得了创建的“ V8 WorkerThread”的8个实例。

我想了解什么决定了v8产生的额外线程的数量以及这些线程的目的。预先感谢!

1 个答案:

答案 0 :(得分:0)

当嵌入程序未指定工作线程(即您!)时,工作线程数是根据CPU内核数选择的。在current implementation中,公式为:number_of_worker_threads = (number_of_CPU_cores - 1) up to a maximum of 8,尽管可能会更改,恕不另行通知。您还可以指定自己的工作线程池大小作为NewDefaultPlatform的参数。

辅助线程用于可以在后台运行的各种任务,主要用于垃圾回收和优化的编译。