игра брюс 2048
Главная / Программирование / Параллельное программирование с помощью языка 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(); 




Главная / Программирование / Параллельное программирование с помощью языка C# / Тест 13