我有一个非常简单的程序,如下所示,它只是创建一个隔离对象,然后休眠:
#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产生的额外线程的数量以及这些线程的目的。预先感谢!
答案 0 :(得分:0)
当嵌入程序未指定工作线程(即您!)时,工作线程数是根据CPU内核数选择的。在current implementation中,公式为:number_of_worker_threads = (number_of_CPU_cores - 1) up to a maximum of 8
,尽管可能会更改,恕不另行通知。您还可以指定自己的工作线程池大小作为NewDefaultPlatform
的参数。
辅助线程用于可以在后台运行的各种任务,主要用于垃圾回收和优化的编译。