LINUX.ORG.RU

Как в очередях регулируют нагрузку процессора?

 


0

3

Есть общий вопрос по очередям, по причине изобретения своего лисапеда. Как в нодах с воркерами регулируется нагрузка процессора? Хочется «чтобы было хорошо», но без крайностей вроде полного дублирования шедьюлера операционки.

Самое простое, это сделать воркеры однотредовыми и выгребать за раз по 1 задаче. Но даже если задача «тяжелая», у нее могут быть операции I/O, где процессор простаивает. Первое что приходит в голову - сделать воркеров в пару раз больше чем ядер, это вроде решит проблему с размазыванием нагрузки на проц.

А как быть если задача «долгая», но не сильно грузит CPU? Например, сканирование URL. Там время уходит на скачивание файла, а проц стоит. И что не очень приятно, если прилетит пачка таких задач (больше чем воркеров), они могут например тормознуть отправку писем (более приоритетные задачи).

Я могу отчасти снять проблемы с блокировками, запакетировав обработку ссылок (чтобы обрабатывалось все что накопилось но только одной задачей). Таким образом, блокироваться будет не больше одного ядра на каждую разновидность неудачной задачи. Но может можно сделать как-то красивее? Без превращения кода в ад.

UPD. Воркер - процесс node.js, то есть кооперативность на уровне IO там есть.

★★★★★

Последнее исправление: Vit (всего исправлений: 1)

Ответ на: комментарий от ya-betmen

Не нужно ничего начинать сначала, то что тебе что-то не нравится в этом решении не значит что само решение плохое.

«Шарик, ты балбес» (с) простоквашино. Ты капитанствуешь на уровне 2x2=4, даже когда тебе прямым текстом говорят, что конкурс капитанов закончился день назад и можно посмотреть результаты самостоятельно.

Vit ★★★★★
() автор топика

Ты чуть ли не дословно пересказываешь презентации pyparallel. Там про то, что ядро windows nt — волшебное и умеет это разруливать.

Ключевое слово, если что — IOCP. Может, в линуксах есть нечто подобное и с умением nodejs.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от eao197

Хренью обычно страдают те, кто высасывает алгоритмы из пальца без анализа их уместности и понимания начальных потребностей.

Vit ★★★★★
() автор топика
Ответ на: комментарий от x3al

Ключевое слово, если что — IOCP.

По-моему это слишком низкоуровневая штука, чтобы сейчас помочь. Пока проблема на уровне «чего пихать в простое апи, чтобы хватало и задачи не блочило».

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Ну так это низкоуровневая задача. И ты знаешь это, поэтому и написал

без крайностей вроде полного дублирования шедьюлера операционки

x3al ★★★★★
()
Ответ на: комментарий от eao197

Извини, я ошибся и думал что ты в эту тему пришел писать по делу, а не с влажными фантазиями.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Ты капитанствуешь на уровне 2x2=4

Так может хватит спрашивать сколько будет 2х2, не? К тому же выше по треду от тебя никаких возражений по существу, ты только размазываешь сопли на тему «а что если то а что если сё». Впрочем мне пофиг, пили себе как нравится, совет я дал.

ya-betmen ★★★★★
()
Ответ на: комментарий от x3al

По-моему ты меня дуришь :) . Или я слишком недалёк, чтобы объять разумом как IOCP ложится на архитектуру очереди.

Vit ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Так может хватит спрашивать сколько будет 2х2, не?

Дык тебя никто не спрашивал, родимый, в том-то и дело :)

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Двигает очередь внутрь ядра (ОС), которое всегда в курсе, когда и сколько тредов запустить, чтобы загрузить все ядра (CPU).

x3al ★★★★★
()
Ответ на: комментарий от x3al

По-моему оно в ядро двигает только специфичные операции (IO), а не «задачи» (куда могут входить вычисления). И в линупсе этого нема. Наверное штука полезная, но я так и не смог разглядеть принципиально новые паттерны, которые есть смысл перетаскивать на высокий уровень в очередь задач.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.