Нужно в цикле извлекать из очереди задачи и выполнять параллельно, но не больше 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>Тебе даже непонятно, почему это крайне плохая идея?
Ты утверждаешь, ты и должен объяснять. И немного корону поправь. А то она у тебя на уши съезжает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.