Желая понять цель и количество WorkerThread (ов) V8 - PullRequest
1 голос
/ 13 мая 2019

У меня есть очень простая программа, которая выглядит следующим образом: она просто создает изолят, а затем спит:

#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-ядерной машине я получаю 8 экземпляров этой «V8 WorkerThread».

Я хочу понять, что определяет количество дополнительных потоков, порождаемых v8, и какова цель этих потоков.Заранее спасибо!

1 Ответ

1 голос
/ 13 мая 2019

Количество рабочих потоков, если оно не указано встроенным устройством (это вы!), Выбирается на основе количества ядер ЦП. В текущей реализации формула: number_of_worker_threads = (number_of_CPU_cores - 1) up to a maximum of 8, хотя это может измениться без уведомления. Вы также можете указать свой собственный размер пула рабочих потоков в качестве аргумента для NewDefaultPlatform.

Рабочие потоки используются для различных задач, которые можно запускать в фоновом режиме, в основном для сбора мусора и оптимизированной компиляции.

...