Показать сообщение отдельно
  #8 (permalink)  
Старый 26.01.2022, 19:42
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

fxobject,
для справки.

1)
longQuery(params, (response) => { ... })

Запрос "куда-то туда". В базу данных, на другой сервер, в файловую систему, пересылка данных по сети... Здесь на отрезке времени от вызова longQuery и до срабатывания колбэка (функции, в которую будет передан response) Node не блокируется, не простаивает. Она вообще забывает про отправленный запрос и занимается своими делами - обработкой других запросов. Потому longQuery безболезненно запускается в основном потоке.

2)
const response = bigCalculationWithLongCycle(params);

это синхронные вычисления. Они заблокируют ноду. Поэтому вот их надо в отдельном воркере. Воркер отработает параллельно и закинет результат в основной поток. Над этой штукой можно легко сделать обертку, подобную п.1, с философией "запрос в другой поток за результатом вычислений", ну ты понял. А ещё правильнее всё потом промисифицировать для пущего удобства.

Если у тебя вперемешку и то и другое, то декомпозируй на функции-запросы и функции-вычисления, после чего пп. 1 и 2.

Последний раз редактировалось Alexandroppolus, 26.01.2022 в 19:51.
Ответить с цитированием