У меня есть n задач в списке ожидания.
С каждой задачей связана запись, содержащая метаинформацию:
Task1 A,B<br>
Task2 A<br>
Task3 B,C<br>
Task4 A,B,C
И связанная хэш-карта, которая содержит записи типа:
A 1
B 2
C 2
Это означает, что если задача, содержащая в своей метаинформации A, уже запущена, то никакая другая задача, содержащая
А может работать одновременно.
Тем не менее, поскольку B имеет ограничение в 2 задачи, то либо task1 и task3 могут выполняться вместе, либо task3 и task4.
Но задача 1, задача 3 и задача 4 не могут работать вместе, так как будут нарушены пределы A и B, хотя предел C не
нарушены.
Если мне нужно выбрать задачи для запуска в разных потоках, какую логику / алгоритм вы бы предложили? И когда эта логика должна
быть вызван? Я рассматриваю список задач как общий ресурс, который может быть заблокирован при выполнении задач
выбраны для запуска из него. Прямо сейчас, я думаю, что эта логика может быть вызвана, когда задача добавлена в список и
также, когда выполняемое задание завершено. Но это может заблокировать добавление новых элементов в список, если я не сделаю копию списка перед запуском логики.
Как изменилась бы ваша логика, если бы я придал более высокий приоритет задачам, которые содержат больше записей, таких как 'A, B, C'
чем это к 'A, B'?
Это своего рода продолжение Выбор структуры данных для варианта проблемы потребителя производителя и Как получить доступ к базовой очереди ThreadpoolExecutor потокобезопасным способом , просто на случай, если кто-нибудь задумывается о причинах проблемы.