Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet580/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   576   577   578   579   580   581   582   583   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.27 .Асинхронные.вычислительные.операции
Parallel LINQ также предоставляет дополнительные методы класса 
Parallel-
Enumerable
, позволяющие управлять обработкой запросов:
public static ParallelQuery WithCancellation(
this ParallelQuery source, CancellationToken cancellationToken)
public static ParallelQuery WithDegreeOfParallelism(
this ParallelQuery source, Int32 degreeOfParallelism)
public static ParallelQuery WithExecutionMode(
this ParallelQuery source, ParallelExecutionMode executionMode)
public static ParallelQuery WithMergeOptions(
this Para
llelQuery source, ParallelMergeOptions mergeOptions)
Очевидно, что методу 
WithCancellation
можно передать объект 
Cancellation-
Token
, что дает возможность в любой момент остановить обработку запроса. Метод 
WithDegreeOfParallelism
задает максимальное количество потоков, которые мо-
гут обрабатывать запрос; при этом, если количество реально необходимых потоков 
меньше указанного, новые потоки не создаются. Обычно этот метод не используется, 
и по умолчанию запрос исполняется одним потоком на одно ядро. Однако этот 
метод можно вызвать, указав число ядер, меньшее реально имеющегося, оставив 
часть ядер для решения других задач. Если запрос выполняет синхронную опера-
цию ввода-вывода, можно указать число ядер, превышающее реально имеющееся, 
так как во время таких операций потоки блокируются. При таком подходе потоки 
используются неэффективно, зато вы быстрее получаете результат. Это можно 
делать в клиентских приложениях, но я бы крайне не рекомендовал прибегать 
к синхронным операциям ввода-вывода в серверных приложениях.
Parallel LINQ анализирует запрос и выбирает оптимальный способ его об-
работки. Иногда производительность может оказаться выше при последова-
тельных запросах. Обычно это бывает при использовании следующих операций: 
Concat

ElementAt(OrDefault)

First(OrDefault)

Last(OrDefault)

Skip(While)

Take(While)
или 
Zip
. Кроме того, это верно для случаев использования перегру-
женных версий методов 
Select(Many)
или 
Where
, в которых селектору передается 
позиционный индекс или делегат, возвращающий логическое значение. При этом 
запрос можно принудительно обработать в параллельном режиме, передав методу 
WithExecutionMode
один из флагов 
ParallelExecutionMode
:
public enum ParallelExecutionMode {
Default = 0, // Способ обработки запроса выбирается автоматически
ForceParallelism = 1 // Запрос обрабатывается в параллельном режиме
}
Как уже упоминалось, в Parallel LINQ обработкой запросов занимается це-
лая группа потоков, а значит, возникает необходимость соединения получен-
ных результатов в один. Для управления буферизацией и слиянием элементов 
используется метод 
WithMergeOptions
, которому передается один из флагов 
ParallelMergeOptions
:


779
Периодические.вычислительные.операции
public enum ParallelMergeOptions {
Default = 0, // Аналогично AutoBuffered (в будущем может измениться)
NotBuffered = 1, // Результаты обрабатываются по мере готовности
AutoBuffered = 2, // Поток буферизует некоторые результаты 
// перед обработкой
FullyBuffered = 3 // Поток буферизует все результаты перед обработкой
}
По сути, эти параметры позволяют выбрать желаемое соотношение скорости 
работы и потребления памяти. Флаг 
NotBuffered
экономит память, но обработка 
элементов происходит медленнее. А вот флаг 
FullyBuffered
увеличивает потре-
бление памяти, но результат вы получите быстрее. Компромиссом между этими 
вариантами является флаг 
AutoBuffered
. Определить, какой именно вариант лучше 
всего подходит именно вам, проще всего экспериментальным путем. Можно также 
принять параметры, предлагаемые по умолчанию, что оптимально для большин-
ства ситуаций. Дополнительную информацию о Parallel LINQ можно найти по 
следующим адресам:
‰
http://blogs msdn com/pfxteam/archive/2009/05/28/9648672 aspx
;
‰
http://blogs msdn com/pfxteam/archive/2009/06/13/9741072 aspx
.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   576   577   578   579   580   581   582   583   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish