Нужна помощь с оптимизацией потоков
У меня есть программа, которая начинается со списка объектов определенного класса. Первый объект присваивается локальной переменной, а затем удаляется из списка. Над этой локальной переменной выполняется работа, которая может привести к появлению нового списка объектов того же класса. если возвращается список, то объекты вставляются обратно в исходный список, отсортированный по свойству класса. Процесс повторяется до тех пор, пока в списке больше нет объектов.
Код основан на подходе ветвей и границ для поиска оптимального решения проблемы. Каждый ответ получает оценку, которая является свойством Result. Чем меньше балл, тем лучше. Ответы с наибольшим количеством баллов выбираются для повторения при выработке новых ответов, каждый со своей собственной оценкой, которые возвращаются в список. После выполнения определенных критериев ответ считается окончательным и больше не обрабатывается. После того, как ответ является окончательным, он сравнивается с текущим лучшим ответом (если есть) и становится лучшим ответом, если у него лучший результат. Способ работы алгоритма оценки делает невозможным получение ответа с более низкой оценкой, поэтому, как только будет найден лучший ответ, любые ответы в списке с более высокой оценкой не могут дать лучший ответ и могут быть удалены из списка.
Dim MainList as new List(of B) Populate(MainList ) ' Populates MainList Dim Best as B = Nothing Do Dim Current as B = MainList(0) MainList.RemoveAt(0) Dim SubList as list(of B)=PerformWork(Current) ' Function that preforms the work if Sublist.Count > 0 then If Sublist(0).IsFinal then ' Note that only 1 item will be returned if IsFinal is true If Best Is Nothing OrElse Best.Result > SubList(0).Result then Best=Sublist(0) Remove(Best.Result) ' Removes all items in MainList that have a Result > Best.Result End if Else Insert(SubList) ' Sub that inserts all the items in SubList into MainList End if end if Loop While MainList.Count > 0
Моя цель состоит в том, чтобы распараллелить этот процесс, взяв первое n число объектов и запустив поток для каждого, который вернет список объектов. Когда каждый поток возвращается, возвращенный список объектов будет вставлен в список, а текущий первый объект будет передан новому потоку.
Каждый пример, который я видел, будет просто перебирать весь список и создавать новый поток для каждого объекта. Поскольку я хочу сосредоточиться только на лучших объектах, и это будет меняться по мере выполнения программы, я не думаю, что это лучший подход. Я мог бы просто перебрать первые 4 пункта и продолжать в том же духе, но я планирую использовать несколько компьютеров, и каждый из них должен будет иметь программное обеспечение, настроенное специально для него. Есть ли какой-нибудь способ заставить фреймворк определить наилучшее количество потоков?
Что я уже пробовал:
Пока ничего мудрого в коде нет, просто просмотрел много статей, которые не очень помогают.