Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди.
Есть готовые решения?
Ад пуст, все бесы здесь.
Re: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Неужели это требует больше 50-и строк кода? Неужели в современном мире написать 50 строк кода считается настолько греховным занятием, что избежание оного оправдывает усилия на поиск готового решения?
Re: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Зависит от требований. Давай детали
Число N какого порядка?
Можно ли заблочить добавление задач в очередь, т.е. не добавлять если все обработчки заняты?
Все задачи живут в RAM?
Что должно произойти с задачей, если ее не удалось обработать, или вообще при полном отказе (например, перезагрузка приложения)?
Best regards, Буравчик
Re: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Здравствуйте, Буравчик, Вы писали:
Б>Число N какого порядка?
Десятки.
Б>Можно ли заблочить добавление задач в очередь, т.е. не добавлять если все обработчки заняты?
Не нужно.
Б>Все задачи живут в RAM?
Да.
Б>Что должно произойти с задачей, если ее не удалось обработать
Удалить из очереди, записать ошибку.
Б>или вообще при полном отказе (например, перезагрузка приложения)?
Если приложение закрывается аварийно, можно просто обнулить очередь. Но при нормальной работе, должна быть возможность дождаться полного окончания всех задач.
Ад пуст, все бесы здесь.
Re: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Это викторина?
Тогда ответ "task pool".
Re[3]: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения? https://learn.microsoft.com/en-us/dotnet/api/system.threading.channels
Re[5]: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Гугл подсказывает, что возможно вот это тебе подойдет.
Если это ограничение на приложение, можно просто задать максимальное число параллельно выполняемых потоков в основном пуле через ThreadPool.SetMaxThreads.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, VladD2, Вы писали:
VD>Гугл подсказывает, что возможно вот это тебе подойдет.
В качественной реализации, как мне видится, должен быть work stealing.
VD>Если это ограничение на приложение, можно просто задать максимальное число параллельно выполняемых потоков в основном пуле
Вообще никуда не годится.
Ад пуст, все бесы здесь.
Re[3]: Очередь задач с ограничением числа исполняемых одновр
C>В качественной реализации, как мне видится, должен быть work stealing.
И работать он судя по вот этому C> Желательно исполнять задачи в том же треде, который добавил их в очередь.
должен по алгоритму thread spizding'a...
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Здравствуйте, VladD2, Вы писали:
VD>Так ты объясни, что ты под этим понимаешь, и зачем это нужно. В теме у тебя ничего про это нет.
А ты сам не в состоянии понять даже с подсказкой?
Например, можно сделать у каждого рабочего треда свою очередь, из которой он извлекает задачи и может добавлять новые. Если в своей очереди ничего нет, можно забрать часть задач у другого треда.
VD>Опять же нужно объяснять почему.
Тебе даже непонятно, почему это крайне плохая идея?
Ад пуст, все бесы здесь.
Re[5]: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>А ты сам не в состоянии понять даже с подсказкой?
Я тут не шарады разгадываю. И остальные тоже. Будешь продолжать хамить, я тебе выпишу время на чтение обязательных правил форума.
C>Например, можно сделать у каждого рабочего треда свою очередь, из которой он извлекает задачи и может добавлять новые. Если в своей очереди ничего нет, можно забрать часть задач у другого треда.
Ничего этого в постановке задачи не было. Так что можно констатировать факт — ты не умеешь ставить задачи. А вместо того чтобы учиться это делать, хамишь.
C>Тебе даже непонятно, почему это крайне плохая идея?
Ты утверждаешь, ты и должен объяснять. И немного корону поправь. А то она у тебя на уши съезжает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, Codealot, Вы писали:
C>Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди. C>Есть готовые решения?
Автор темы ушел на неделю в бан. Приходя на форум с вопросами нужно уважительно относиться к коллегам.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Очередь задач с ограничением числа исполняемых одновременно
Здравствуйте, VladD2, Вы писали:
VD>Ты утверждаешь, ты и должен объяснять.
Если одна подсистема забьет глобальный пул тредов — вся остальная прога встанет раком. Казалось бы, такие азы должны быть очевидны.
VD>И немного корону поправь. А то она у тебя на уши съезжает.
Вернемся немного назад. Я задал вопрос о готовой реализации для этой задачи. Каковая задача совершенно нетривиальна, если делать ее с умом.
Вместо этого, Pzz и ты начали придумывать отсебятину, которая по вашему мнению должна быть ничем не хуже. Крайне примитивную и дубовую отсебятину. И теперь ты возмущаешься, почему я не согласен, что ваша отсебятина — лучше не бывает, и никакие готовые решения не нужны.
Так что ты там про корону писал?
Ад пуст, все бесы здесь.
Re[7]: Очередь задач с ограничением числа исполняемых одновр
Здравствуйте, Codealot, Вы писали:
C>Если одна подсистема забьет глобальный пул тредов — вся остальная прога встанет раком. Казалось бы, такие азы должны быть очевидны.
Еще раз. Ты должен объяснить особенности своей системы. Создать универсальное решение годящееся на все случаи жизни невозможно. По этому для того, чтобы тебе посоветовали что-то дельное, ты должен максимально детально описать свою задачу.
Разных подходов много. Дотнетный пул и так автоматически загружает все доступные процессоры. Рассуждения о Work stealing тут не о чем.
C>Вернемся немного назад.
ОК
C>Я задал вопрос о готовой реализации для этой задачи.
Ты описал крайне абстрактную задачу без каких либо подробностей:
Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше N задач одновременно. И нужно добавлять новые задачи в хвост очереди.
Есть готовые решения?
Тебе резонно ответили, что в такой постановке вопроса задача выеденного яйца не стоит:
Неужели это требует больше 50-и строк кода? Неужели в современном мире написать 50 строк кода считается настолько греховным занятием, что избежание оного оправдывает усилия на поиск готового решения?
Тебе попытались что-то объяснить, но тщетно. Ты начал здесь хамить уже с квантором всеобщности.
После чего я счел тебя невменяемым и дал время на приход в себя.
Баны у нас квадратичные. Так что ты улетел сразу на неделю.
C> Каковая задача совершенно нетривиальна, если делать ее с умом.
Возможно. Но её нетривиальность нужно объяснить. Составить требования (т.з.), в которых описать все необходимые нюансы.
Форумчане не знаю делаешь ли ты какую-то отдельную утилиту или часть в большой многопоточной системе. Не знают, что за данные обрабатываются. Каковы конечные цели.
C>Вместо этого, Pzz и ты начали придумывать отсебятину, которая по вашему мнению должна быть ничем не хуже. Крайне примитивную и дубовую отсебятину. И теперь ты возмущаешься, почему я не согласен, что ваша отсебятина — лучше не бывает, и никакие готовые решения не нужны. C>Так что ты там про корону писал?
Еще раз. Если ты вменяемый человек, то должен понять, что тебе говорят. В твоем описании ничего сложного нет. Если есть какие-то не описанные тобой, но подразумеваемые нюансы и нужно их описать. И тогда ни никто не будет у тебя спрашивать, зачем ты сюда пришел со столь примитивным вопросом.
Ты вместо того, чтобы понять, что описал задачу слишком поверхностно, начал хамить. Если бы ты в ответ на замечание Pzz объяснил бы в чем сложность, был бы конструктивный разговор. Ты пришел спрашивать. Если тебе не нравится ответ, просто пойди мимо или культурно объясни, что тебя не устраивает. А когда начинаешь тут говорить, что "здесь все шибко умные, а все программы говно", то не обессудь.
А вот это мы здесь допускать не будем. (ц)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.