Якщо ви їх використовуєте, настійно рекомендую під час запуску програми перевіряти кількість доступних ядер для вашого застосунка. Таким чином ви гарантуєте, що програма матиме необхідну кількість ресурсів. Наприклад, DevOps не забув внести зміни у deployment файл для Kubernetes.
Приклад коду
import { availableParallelism } from ‘node:os'; // Node 18.4+
const vCPUs = availableParallelism();
if (vCPUs < 2) throw new Error(`Minimum 2 vCPUs is required`);
Зверніть увагу, що availableParallelism віддає цілі значення, тоді як налаштування кількості ядер може бути дробовою. Приклад:
docker run --rm --cpus=1.5 node:22-alpine node -e "console.log(require('os').availableParallelism())"
Звісно, ми можемо зробити це через /sys/fs/cgroup/cpu файли щоб отримати дробове значення, але це вже OS specific
Как це буде працювати?
Контейнер може одночасно запускати 2 потоки, але в сумі за 100 мс не повинен перевищувати 150 мс процесорного часу інакше Linux throttling починає «гальмувати» процеси всередині контейнера, знижуючи їх пріоритет. Ось щоб у нас не було throttling, нам й потрібно перевірити availableParallelism.