Я с большим интересом слежу за разработкой .NET Parallell Library (TPL), поскольку Microsoft впервые объявила об этом.
В моем сознании нет сомнений, что мы в конечном итоге воспользуемся TPL. Я задаюсь вопросом, имеет ли смысл начинать использовать TPL, когда выпущены Visual Studio 2010 и .NET 4.0, или имеет смысл ждать немного дольше.
Зачем начинать сейчас?
- Параллельная библиотека задач .NET 4.0 выглядит хорошо продуманной, и некоторые относительно простые тесты показывают, что она хорошо работает на современных многоядерных процессорах.
- Меня очень интересовали потенциальные преимущества использования нескольких легких потоков для ускорения работы нашего программного обеспечения с момента покупки моего первого четырехъядерного процессора Dell Powerge 6400 около семи лет назад. Эксперименты в то время показали, что это не стоило усилий, что я объяснял в основном издержками перемещения данных между каждым кэшем ЦП (тогда не было никакого общего кэша) и ОЗУ.
- Конкурентное преимущество - некоторые из наших клиентов никогда не смогут получить достаточную производительность, и нет сомнений в том, что сегодня мы можем построить более быстрый продукт с использованием TPL.
- Звучит весело. Да, я понимаю, что некоторые разработчики предпочли бы окунуться в глаза с острым стержнем, но нам действительно нравится максимальная производительность.
Зачем ждать?
- Являются ли сегодня процессорами Intel Nehalem, где мы собираемся поддерживать многоядерную поддержку? Вы можете приобрести центральный процессор Nehalem с четырьмя ядрами, которые сегодня используют общий кеш уровня 3, и, скорее всего, 6-ядерный процессор, использующий кеш одного уровня 3 к моменту выпуска Visual Studio 2010/.NET 4.0. Очевидно, что количество ядер будет расти со временем, но как насчет архитектуры? По мере того, как количество ядер увеличится, они все равно будут использовать кеш? Одна из проблем Nehalem заключается в том, что, хотя между ядрами существует очень быстрое межсоединение, они имеют неравномерный доступ к памяти (NUMA), что может привести к снижению производительности и менее прогнозируемым результатам. Будут ли будущие многоядерные архитектуры удалять NUMA?
- Аналогично, изменится ли параллельная библиотека .NET Task, когда она созреет, и потребует внесения изменений в код, чтобы полностью использовать ее?
Ограничения
- Наш основной движок - 100% С# и должен работать без полного доверия, поэтому мы ограничены использованием .NET API.