0

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

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

ответ

1

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

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

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

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

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