Параллелизм в .Net - PullRequest
       11

Параллелизм в .Net

6 голосов
/ 04 июня 2010

Меня попросили показать преимущества и ограничения параллелизма и оценить его для использования в нашей компании. Мы занимаемся преимущественно бизнесом, ориентированным на данные, и по сути загружаем объекты из базы данных, затем помещаем их через некоторую бизнес-логику, отображаемую для пользователя, а затем сохраняем обратно в БД. На мой взгляд, в этой конвейерной линии не так уж много пользы от параллельной работы, но, будучи довольно новым для этой концепции, я могу быть совершенно неправ. Будет ли какая-то часть этого простого трубопровода, которая выиграет от параллельной работы? И есть ли рекомендации, как реализовать этот стиль программирования?

Кроме того, есть ли какие-либо инструменты (желательно, которые поставляются с VS2010), которые бы показывали, где возникают «горлышки бутылок», и могли бы визуально показывать, что происходит, когда я нажимаю «Перейти» в простом приложении, которое запускает заданное количество циклов (предварительно написанные простые математические циклы, например, для i как целое число от 1 до 1000 - выполнить некоторые вычисления) параллельно, затем последовательно?

Мне нужно иметь возможность отображать разницу, используя приличный инструмент профилирования.

Ответы [ 5 ]

4 голосов
/ 04 июня 2010

Да, даже из этой простой модели вы можете значительно извлечь выгоду из параллелизма.

Скажем, например, что во время загрузки ваших данных вы делаете что-то вроде этого:

foreach(var datarow in someDataSet)
{
    //put your data into some business objects here
}

Вы можете оптимизировать это с помощью параллелизма, выполнив что-то вроде этого:

Parrallel.ForEach(someDataSet, datarow =>
{
    //put your data into some business objects here
});

Это может значительно повысить вашу производительность в зависимости от того, сколько данных вы здесь обрабатываете.Теперь строка будет обрабатываться асинхронно, а не по порядку, как в типичном цикле foreach.

Я бы предложил вам выполнить несколько простых тестов производительности на примере, таком же простом, как этот, и посмотреть, какие результаты вы получите,Разместите это в электронной таблице или еще где-нибудь, и покажите это своей команде.Вы можете быть удивлены полученными результатами.

1 голос
/ 04 июня 2010

Возможно, но мой общий ответ на такой запрос, как правило, был бы: - Есть ли у вас проблемы с производительностью в ваших приложениях? Если да, то непременно выясните, почему и подумайте, может ли помочь параллельное выполнение. Если нет, то время лучше всего проводить в другом месте.

1 голос
/ 04 июня 2010

Конечно, есть много задач, которые можно распараллелить, подробный анализ может помочь, но узкие места являются возможными кандидатами.
Этот материал может помочь вам Шаблоны для параллельного программирования: понимание и применение параллельных шаблонов с помощью .NET Framework 4

1 голос
/ 04 июня 2010

Вы можете получить больше преимуществ от реализации уровня кэширования (распределенного или иного), чем распараллеливание текущего конвейера.

При использовании слоя кэширования объекты, которые вы часто используете, будут находиться в кеше в памяти, что обеспечивает гораздо большую производительность чтения / записи. Существует несколько вариантов синхронизации кеша, и они будут различаться в зависимости от выбранного поставщика.

Я бы посоветовал взглянуть на MemCached и NCache и посмотреть, считаете ли вы, что они подойдут.

РЕДАКТИРОВАТЬ: Что касается инструментов профилирования, я широко использовал dotTrace и очень рекомендую его. Вы можете загрузить 30-дневную пробную версию с сайта JetBrains.

0 голосов
/ 04 июня 2010

Вы зашли на сайт Microsoft Parallel Computing with Managed Code ? Он содержит несколько статей о руководящих принципах реализации, в которых обсуждаются как и когда использовать параллельные функции .Net 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...