Node.js имеет несколько способов исполнения CPU-bound заданий:
1. Просто запустить CPU-bound задачу в одном процессе, блокируя event loop. Кто-то может возразить, что это совсем не вариант, но если этот процесс был специально создан для этой задачи, то почему бы и нет. Правда не у всех есть пара дополнительных ядер.
2. Создать отдельные процессы (Child Processes), распределить между ними задания.
3. Создать cluster и заставить работать отдельные процессы в нем.
4. Использовать Worker Threads и создать несколько дополнительных потоков исполнения.
5. Попросить C++ разработчика написать C++ Addon, который загадочным образом выполняет CPU-bound задания. В конце концов, думаю все слышали старинные легенды про компилируемые языки программирования и о том, что “нативная” реализация ― это всегда успех (на этой фразе где-то в мире должен заплакать React Native разработчик, смотря на перформанс своего приложения).