Я пытаюсь выполнить произвольный код, предоставленный пользователем, достаточно безопасным и контролируемым образом. Я делал это, используя child_process.exe c в облачной функции Google.
Однако я обнаружил, что время выполнения может довольно сильно различаться.
Запуск одного console.log
внутри облачной функции напрямую, по сравнению с child_process.exe c внутри облачной функции, приводит к накладным расходам в 500-4000 мс времени выполнения.
Кажется немного сумасшедшим, что оба:
- может варьироваться так широко.
- Может потребоваться более 4 секунд для запуска в отдельном потоке.
Полагаю, это потому, что они, по сути, выделяют только один поток для функции Cloud, и мой процесс должен ждать, пока другой на этой машине не освободится.
Есть ли что-то, что я могу сделать даже для этого out?
Главное, что меня беспокоит, это неконтролируемые выходы из функции. Поэтому другой альтернативой является попытка использовать process.on('uncaughtException')
для отлова и ответа, прежде чем делать process.exit(0)
или что-то еще. Но это становится странным, нечистым и трудным для тестирования довольно быстро.
РЕДАКТИРОВАТЬ: Подробнее: Мне также кажется, что я вызываю функцию только один раз каждые 5 минут, так что это может быть холодный старт до некоторой степени. Но даже если я называю это непрерывно, накладные расходы меняются часто от 500 мс до 2000 мс.