Я читал о шаблоне пула потоков, и я не могу найти обычное решение для следующей проблемы.
Иногда я хочу, чтобы задачи выполнялись последовательно. Например, я читаю куски текста из файла и по какой-то причине мне нужно обрабатывать куски в таком порядке. Поэтому я хочу исключить параллелизм для некоторых задач .
Рассмотрим этот сценарий, когда задачи с *
необходимо обрабатывать в том порядке, в котором они были вставлены. Другие задачи можно обрабатывать в любом порядке.
push task1
push task2
push task3 *
push task4 *
push task5
push task6 *
....
and so on
В контексте пула потоков, без этого ограничения, одиночная очередь ожидающих задач работает нормально, но здесь явно нет.
Я думал о том, чтобы некоторые из потоков работали в определенной для потока очереди, а другие - в "глобальной" очереди. Затем, чтобы последовательно выполнить некоторые задачи, мне просто нужно поместить их в очередь, в которую смотрит один поток. Это делает звучит немного неуклюже.
Итак, настоящий вопрос в этой длинной истории: как бы вы решили это? Как бы вы обеспечили заказ этих задач ?
EDIT
В качестве более общей проблемы предположим, что приведенный выше сценарий становится
push task1
push task2 **
push task3 *
push task4 *
push task5
push task6 *
push task7 **
push task8 *
push task9
....
and so on
Я имею в виду, что задачи внутри группы должны выполняться последовательно, но сами группы могут смешиваться. Например, вы можете иметь 3-2-5-4-7
.
Еще одна вещь, на которую следует обратить внимание, - это то, что у меня нет доступа ко всем задачам в группе заранее (и я не могу дождаться, пока все они придут, прежде чем начать группу).
Спасибо за ваше время.