Явные многоядерные приложения на C#
Есть ли простой способ явно сделать уже многопоточное приложение, использующее многоядерную среду? (если есть в наличии).
Первая проблема заключается в том, как определить, поддерживает ли моя среда выполнения многоядерные приложения?
Если я затем определю, что могу использовать многоядерные функции, могу ли я явно назначить потоки для работы на разных ядрах? Если да, обрабатывается ли связь между потоками операционной системой или оборудованием, или мне нужно испачкать руки?
5 ответов
Если ваше приложение уже создано правильно, вам не нужно ничего делать. Выполнение контекста потока и его обработка для вас.
Теперь, когда дело доходит до многопоточности, ваше приложение ориентировано на использование ядер? Есть ли у вас процессорные задачи, разделенные на отдельные потоки. Если нет, то вам нужно будет внести изменения, чтобы разделить задачи обработки на большее количество потоков. Вы можете использовать Environment.ProcessorCount, чтобы получить количество ядер и создать столько потоков, сколько необходимо во время выполнения для ваших задач.
На данный момент нет никакого способа превратить неправильно потоковое приложение (однопоточное) в многопоточное приложение, использующее преимущества всех процессоров / ядер, если вы не посмотрите на будущие технологии, такие как plinq и Parallel FX.
Привет есть 2 расширения, о которых я знаю
Параллельная домашняя страница C#
Посетите блог MSDN Somasegars по MS June CTP для параллельных расширений 3.5
MSDN
Библиотека состоит из следующих компонентов:
- Task Parallel Library (TPL), которая обеспечивает поддержку обязательного параллелизма данных и задач.
- Parallel LINQ (PLINQ), обеспечивающий поддержку декларативного параллелизма данных.
- Структуры данных координации (CDS), которые обеспечивают поддержку координации работы и управления общим состоянием.
В настоящее время вы можете установить доступные процессоры для данного процесса, используя Process.ProcessorAffinity, но назначение определенных потоков определенным процессорам выполняется неявно. На самом деле это хорошая вещь в большинстве случаев, поскольку интеллектуальная среда выполнения, использующая информацию о производительности в реальном времени и о балансе нагрузки, обычно может выполнять работу лучше, чем статически, по крайней мере, для многоядерного контекста, в котором работает основной многоядерный процессор.
Это проблема. Как сделать потоковое приложение, как конвертировать существующий код. Я хочу использовать многоядерный в C#. Тем не менее, ParallelFX все еще бета. Я не буду разрабатывать с использованием бета-версии. И я не хочу снова менять весь код (я перевел свои приложения из VB 6). Сегодня я получил новостную рассылку от Packt Publishing, в которой объявляется о новой книге о параллельном программировании на C#. C# 2008 и 2005 Потоковое программирование. Я думаю, что это сосредотачивается на вещах, о которых мы ведем блог везде. Как придумать и разработать потоковое приложение, не дожидаясь нового чуда языка. Приятно видеть книги, полностью посвященные этой теме, потому что у нас полно блогов на эту тему. Ссылка http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and-2005-threaded-programming/book Я думаю, что это заслуживает возможности. Я дам вам знать мой отзыв, когда я его куплю.
Не вдаваясь в подробности (пока я не уверен, какой объем информации является общедоступным), следующая версия.NET Framework будет более полезна для этого. Скорее всего, вы не захотите или не будете думать об управлении потоками вручную Я уверен, что после PDC будет опубликовано больше информации (конец октября).