Главная / Программирование /
Параллельное программирование с помощью языка C# / Тест 13
Параллельное программирование с помощью языка C# - тест 13
Упражнение 1:
Номер 1
Каким образом можно распараллелить следующий LINQ
-запрос?
var q = data.Select(item => f(item)).Where(o => p(o));
Ответ:
 (1) модификация запроса не требуется. Обработка запросов в C#
4.0 автоматически распараллеливается.  
 (2) добавить модификатор AsParallel
() после источника данных 
 (3) добавить модификатор AsParallel
() в конец запроса 
 (4) использовать параметр ParallelOptions
при выполнении запроса Select
 
 (5) использовать параметр ParallelOptions
при выполнении запроса в методе ToList
() или ToArray
() 
Номер 2
Для параллельного выполнения следующего LINQ
-запроса необходимо:
var q = Enumerable.Range(1, 100000).Select( i => f(i)).Where(d => d% 11);
Ответ:
 (1) добавить вызов метода AsParallel
перед методом Select
 
 (2) добавить вызов метода AsParallel
в конец запроса 
 (3) добавить вызов метода AsParallel
перед методом Range
 
 (4) использовать параметр ParallelOptions
при выполнении запроса в методе ToList
() или ToArray
() 
Номер 3
Каким образом можно распараллелить следующий LINQ
-запрос?
var q = from n in numbers
where n % 2 > 0
select n;
Ответ:
 (1) модификация запроса не требуется. Обработка запросов в C#
4.0 автоматически распараллеливается.  
 (2) добавить вызов метода AsParallel
() для источника данных 
 (3) добавить служебные слова as
parallel
в конец запроса 
 (4) использовать параметр ParallelOptions
при выполнении запроса в методе ToList
() или ToArray
() 
Упражнение 2:
Номер 1
Блочное (динамическое) разделение данных осуществляется при выполнении следующего PLINQ
-запроса:
Ответ:
 (1) Partitioner.Create(ParallelData, true).Where(item=>f(item)).Select(item=>f(item);
 
 (2) ParallelEnumerable.Range(1, 1000).Where(i => i%5 == 0).Select(i=> i*i);
 
 (3) ParallelData.Select(o => f(o)).GroupBy(o.Key);
 
 (4) блочное разделение данных осуществляется во всех PLINQ-запросах
 
Номер 2
Хэш-секционирование для разделения данных используется в следующих фрагментах:
Ответ:
 (1) var q = ParallelData.GroupBy(o => o.Key
); 
 (2) var q = ParallelData.Distinct()
; 
 (3) var q = ParallelData.Wherede(o => f(o));
 
 (4) ни в одном из фрагментов не применяется хэш-секционирование 
Номер 3
Разделение данных по диапазону осуществляется в следующих PLINQ-
запросах:
Ответ:
 (1) разделение данных по диапазону осуществляется во всех PLINQ
-запросах 
 (2) >var q = Partitioner.Create(ParallelData, true)
Where(item=>f(item)).Select(item=>f(item); 
 (3) var q = ParallelEnumerable.Range(1, 1000).Where(i => i%5 == 0).Select(i=> i*i);
 
 (4) var q = ParallelData.GroupBy(o.Key);
 
Упражнение 3:
Номер 1
Какие LINQ
-операторы снижают эффективность распараллеливания:
Ответ:
 (1) WithMergeOptions(ParallelMergeOptions.NotBuffered)
 
 (2) AsOrdered
 
 (3) WithMergeOptions(ParallelMergeOptions.FullyBuffered)
 
 (4) WithCancellation
 
Номер 2
Какие операторы используются только в параллельных запросах
Ответ:
 (1) AsUnordered
 
 (2) SelectMany
 
 (3) Aggregate
 
 (4) WithCancellation
 
Номер 3
Какой из перечисленных LINQ
-операторов обладает наименьшей эффективностью распараллеливания:
Ответ:
 (1) Where
 
 (2) Distinct
 
 (3) Max
 
 (4) Select
 
Упражнение 4:
Номер 1
Какие операторы выполняются последовательно в PLINQ-запросах
Ответ:
 (1) Min, Max
 
 (2) Aggregate
 
 (3) Distinct, GroupBy
 
 (4) нет правильного ответа 
Номер 2
Операторы агрегирования для объекта ParallelQuery<T>
Ответ:
 (1) выполняется параллельно 
 (2) выполняется последовательно 
 (3) могут выполняться как последовательно, так и параллельно 
 (4) объект ParallelQuery<T>
не позволяет выполнять операторы агрегирования 
Номер 3
Агрегированные вычисления могут осуществляться параллельно для следующих операторов
Ответ:
 (1) Min
 
 (2) Max
 
 (3) Aggregate
 
 (4) агрегированные вычисления осуществляются только последовательно 
Упражнение 5:
Номер 1
Блок try
для обработки исключений, возникающий при выполнении PLINQ
-запроса, обрамляет:
Ответ:
 (1) определение запроса 
 (2) обращение к методам ToList
, ToArray
, ToDictionary
 
 (3) перебор элементов запроса в for-
или foreach-цикле
 
 (4) обработка исключений осуществляется внутри запроса 
Номер 2
Для отмены выполняющегося PLINQ
-запроса можно использовать
Ответ:
 (1) метод Cancel
объекта CancellationTokenSource
 
 (2) метод Cancel
объекта ParallelQuery<T>
 
 (3) метод Stop
объекта ParallelQuery<T>
 
 (4) не существует возможности отменить выполняющийся запрос 
Номер 3
Можно ли выполнить досрочную остановку выполнения PLINQ
-запроса?
Ответ:
 (1) методы Stop
и Break
объекта ParallelLoopState
 
 (2) с помощью токена отмены 
 (3) не существует возможности досрочной остановки 
 (4) с помощью генерации исключения при обработке элементов 
Упражнение 6:
Номер 1
Следующий запрос выполняется
var q = ParallelEnumerable.Range(1, N).Where(n=>true).Take(10).ToArray();
Ответ:
 (1) параллельно 
 (2) последовательно 
 (3) параллельно или последовательно в зависимости от величины N
 
 (4) нет правильных вариантов 
Номер 2
Какой запрос выполняется последовательно
Ответ:
 (1) ParallelEnumerable.Range(1, N).Where(n=>true).Take(5).ToArray();
 
 (2) ParallelEnumerable.Range(1, N).Take(5).ToArray();
 
 (3) ParallelEnumerable.Range(1, N).SelectMany(i => f(i)).ToArray();
 
 (4) ParallelEnumerable.Range(1, N).Where(n=> n % 2 == 0).ToArray();
 
Номер 3
Какие запросы выполняются параллельно?
Ответ:
 (1) ParallelEnumerable.Range(1, N).Where(n=>true).Take(5).ToArray();
 
 (2) ParallelEnumerable.Range(1, N).Take(5).ToArray();
 
 (3) ParallelEnumerable.Range(1, N).Where(n=> n % 2 == 0).Take(5).ToArray();
 
 (4) ParallelEnumerable.Range(1, N).Where(n=> n % 2 == 0).ToArray();