Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.01.2022, 07:23
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

тяжеловесный запрос
Уважаемые господа!
Предстоит переработка тяжеловесного запроса с java на node. В зависимости от состояния базы данных запрос может длится от нескольких минут до десятков минут (от 20 до 30 минут).
Собственно вопрос вот в чем. Node - это однопоточное чудовище, т.е. в это время будет заблокирована вся работа системы (не путать с ОС).
Собственно идея - на каждой итерации цикла уходить в очередь Node и в следующий свободный цикл продолжать выполнение.
Как продолжить примерно знаю.... примерно. Но вот как уйти. Вообще соображениями если поделитесь буду благодарен
Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 25.01.2022, 07:29
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

кстати где то прочел, что node уже не однопоточен. последняя версия вроде бы предоставляет возможности работы с потоками. кто-нибудь, что-нибудь подскажет по этому поводу?
Ответить с цитированием
  #3 (permalink)  
Старый 25.01.2022, 11:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от fxobject
Node - это однопоточное чудовище, т.е. в это время будет заблокирована вся работа системы
Что такое ты собираешься вычислять так долго?
Т.к. в ноде есть еще асинхронность, которую ты, вроде как, не собираешься использовать...
Ответить с цитированием
  #4 (permalink)  
Старый 25.01.2022, 11:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Хотя ты на своей волне и тебе что-то советовать - только портить.
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2022, 18:35
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

Ох уж эти преподаватели. У них студенты всегда тупее их самих. При больших объемах вычислений никакая асинхронность вам не поможет. Хотя бы потому что код большого количества вычислений будет держать node машину и никаких асинхронных операций не будет происходить пока не закончится код. И это никакая вообще не асинхронность. Если уважаемый преподаватель вы изучали программирование то должны понимать что асинхронность возникает например в прерываниях обработки от устройств, в многопоточных процессах но никак не в однопоточной задачи NODE. Node реализована в виде обработки очередей и складывается ощущение что это асинхронность. Банан вам за теорию.
Соответственно задача с большими вычислениями на node решается двумя путями
1 вариант : делите свой код на части. например на итерации цикла. И для каждого цикла используете функцию setImmediate(). Но это не асинхронность (в прямом смысле этого слова)
2 вариант используете многопоточность. node оказывается давно умеет это делать. Используется модуль worker_threads. ну и просто читаем как он работает.
Уважаемый учитель! Если мне что то советовать - только портить что то там, очень обяжете если мои вопросы будете просто обходить мимо. Я не нуждаюсь в вашей помощи, а вы просто гадите.
Без хамства вы просто не можете. Обратите внимание я до сих пор обращаюсь к вам на Вы, хоты вы с самого начала тыкаете мне. У вас нет на это права ни как у старшего, ни как у (тем более) специалиста. Вы даже не пытаетесь вникнуть в суть вопроса. Ваша доминантность просто зашкаливает.
Ответить с цитированием
  #6 (permalink)  
Старый 25.01.2022, 20:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

У нас свободный форум... Но с тобой точно не стоит вообще иметь дело.
Ответить с цитированием
  #7 (permalink)  
Старый 26.01.2022, 08:05
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от fxobject
В зависимости от состояния базы данных....
Сообщение от fxobject
что асинхронность возникает например в прерываниях обработки от устройств
Сообщение от fxobject
Node реализована в виде обработки очередей ...
Если такие времена возникают не от простого перемалывания чисел, типа решения системы диф. уравнений, а от обращений к БД и ожиданий ответа, то будет и асинхронность.
Ответить с цитированием
  #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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать сложный запрос rita Node.JS 1 21.04.2021 00:17
Не отправляется 2й запрос после 1го. (XMLHttpRequest) Артист AJAX и COMET 6 05.10.2016 00:37
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13
Запрос на сервер Serjuk AJAX и COMET 6 04.06.2012 03:09
Запрос - ответ(VK,json) Slawaq Серверные языки и технологии 4 25.09.2010 00:28