Что такое шаблон проектирования для асинхронной работы, которая может производить больше работы?

Я пытался элегантно обработать случай, когда асинхронный рабочий поток выдает результат и (возможно) идентифицирует больше работы, которая должна быть выполнена. Иначе говоря, если вы обходите дерево и выполняете работу на каждом узле, работник обрабатывает узел в середине дерева и обнаруживает дочерние узлы, которые сами требуют работы.

Разумно ли для рабочего потока добавить больше заданий в очередь заданий? Это потребовало бы, чтобы работник знал кое-что о системе параллелизма, частью которой он является, что, кажется, нарушает какое-то неписанное правило для меня. Как еще эта проблема была решена?

1 ответ

Решение

Разумно ли для рабочего потока добавить больше заданий в очередь заданий?

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

Как еще эта проблема была решена?

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

Это означает, что жнец должен будет обрабатывать результаты в режиме реального времени для оптимального параллелизма.

Другие вопросы по тегам