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