Как ограничить использование процессора для функции?
День добрый! Есть у нас функция, которая бежит по всем юзерам и переписывает некоторые параметры. Функция не критичная и ее время выполнения не важно. Однако, так как используется простой цикл, то все выполняется по очереди, тем самым загружая процессор на 100% и очень замедляющее работу основного приложения.
Можно, конечно, воткнуть timeout, но хотелось бы поступить изящнее и просто задать какой-нибудь приоритет выполнения данной функции. Используем nodejs под метеором.
Поясните пожалуйста, юзеры обычно хранятся в базе и для обновления нужен всего один запрос. Что это за ситуация, в которой у вас все юзеры находятся в массиве и по ним надо пробежаться? Это немного странно.
Написано
Александр Вульф
@mannaro Автор вопроса, куратор тега JavaScript
Кирилл: юзеры-то в одном месте, но есть еще куча таблиц, данные из которых надо собрать вместе и записать в поле юзера. А это уже не один запрос и не так быстро :)
Александр Вульф: просто в момент выполнения обновления записи в базе у вас будет операция ввода/вывода, а значит процесс ноды освободится для обработки клиентов. Я могу ошибаться, но в вашем случае просто нужно считать данные для обновления не в отдельном медленном цикле, а непосредственно перед выполнением конкретного запроса к БД. Хотя возможно я просто не понимаю специфики вашей задачи.
Если вы хотите сделать это на NodeJS. В данный момент максимум что вы сделаете:
1) Запустите NodeJS в многопоточном режиме
2) Будете использовать таймеры
3) 1+2