Я новичок в многопоточности и работаю над распараллеливанием области в моем приложении.Я прочитал несколько постов на этом сайте, но я все еще не понимаю, как лучше решить мою проблему:
[1] В .NET 3.5 это ThreadPool
единственный способпрограмма для эксплуатации многоядерных процессоров в машине?т.е. возможно ли порождать потоки на разных ядрах, используя new Thread()
?
[2] Мой случай: у меня есть List<Calculation>
, который содержит около 80 элементов, которые в настоящее время обрабатываются последовательно.Поэтому, учитывая, что я использую .NET 3.5 и основываясь на том, что я прочитал, ThreadPool
- это, вероятно, моя лучшая ставка для многопоточности из-за большого количества потоков:большая зависимость между расчетами.В настоящее время список упорядочен таким образом, что все необходимые вычисления выполняются в начале.
Так выглядит зависимость рабочих элементов (детали не важны, просто хотелось выделить точкупо сложности зависимостей):
- Время расчета сильно отличается, один объект вычисления может просто включать в себя получение значения, другие объекты вычисления могут потребовать многоработы во вложенных циклах ... и т. д.
Как назначить приоритеты основным Calculations
, в которых есть что-то вроде 10+ других рабочих элементов, в зависимости от этого?Какой самый эффективный способ сигнализации использовать?
Спасибо.
Редактировать: я должен отметить, что List<Calculation>
остается фиксированным.Тем не менее, вычисление 80+ расчетов называется х миллионов раз.Каждый раз, когда обновляется итератор, Calculate () вызывается для каждого Calculation
в списке.