NodeJs( V8 ) или C / C++ для тяжёлых CPU операций ( > 100 Mlsec )?
Является ли нормальной практикой написание некоторого хард-cpu участка кода со временем выполнения, скажем, больше 100 миллисекунд для NodeJS на С / С++ ? Ну и дальнейшее интегрирование его с нодой путём создания дочернего процесса с ноды / создание аддона.
Особенно, например, если задача хорошо распараллеливается, тогда можно было бы даже использовать CUDA.
Как пример: предположим, что для какого-либо end-point'а требуется сделать обход в ширину в довольно большом ветвистом графе, граф получается параметризован по GET-параметрам, т.е. для каждого запроса придётся повторять обход ( не представляется возможным считать 1 раз в n секунд и где-то кэшировать результат ).
Так вот вопрос, так кто-то делает или есть какие-либо другие подходы для решения подобных проблем ?
VladimirMirand, ну я в вопросе упомянул примерный уровень абстракции алгоритмов, понятно же что алгоритмы для графов != арифметика. А услышать хотел не про ассемблер, а про то, как часто люди используют интеграцию с / с++ в ноду и является ли это оптимальным подходом
перетянуть эту часть на C++ и уже строить отдельный мост для интеграции двух приложений между собой (нода + часть на C++)
Кстати, насчёт этого тоже есть некоторые неясности, например, после какого объёма приложение лучше делать не как аддон для ноды, а как полностью автономную программу с протоколом для общения с ней
Смотря что за задача. Так то в основном и на 200 милисекунд никто не заморачивается.
Если вам скорость действительно критична - выносите в C/C++, можно сделать native module для ноды, тогде не придется играть с дочерними процессами и всем таким - но будут потери на boxing/unboxing - это все надо считать для вашей конкретной задачи и смотреть какой профит.
Если это прям какая-то отдельная логика и задача - можно вообще сделать отдельным сервисом на той же машине - и просто посылать туда запросы и получать ответы каким-то локальным транспортом.