43 Возможности библиотеки Task Parallel Library. Тест 7

Следующий фрагмент кода приводит к действиям планировщика:
 static void Main() 
 { 
 .. 
 Task t1 = Task.Factory.StartNew( () => 
 SomeWork()); 
 Task t2 = Task.Factory.StartNew( () => 
 SoweWork()); 
 .. 
 } 
(Отметьте один правильный вариант ответа.)
Вариант 1 задачи t1 и t2 помещаются в одну и ту же локальную очередь рабочего потока
Вариант 2 задачи t1 и t2 помещаются в глобальную очередь пула потоков
Вариант 3 ни один из перечисленных вариантов
Вариант 4 задачи t1 и t2 помещаются в локальные очереди разных рабочих потоков

Технология Inlined execution предназначена для оптимизации выполнения:
(Отметьте один правильный вариант ответа.)
Вариант 1 долго выполняющихся задач
Вариант 2 только дочерних вложенных задач
Вариант 3 задач в глобальной очереди
Вариант 4 задач в локально очереди потока

Для помещения вложенной задачи в глобальную очередь потока необходимо
(Отметьте один правильный вариант ответа.)
Вариант 1 вложенные задачи помещаются только в локальную очередь рабочего потока
Вариант 2 использовать параметр PreferFairness при создании задачи
Вариант 3 использовать параметр LongRunning при создании задачи
Вариант 4 использовать параметр RunSynchronously

Параметр LongRunning при создании задачи
(Отметьте один правильный вариант ответа.)
Вариант 1 настраивает оптимизационные алгоритмы планировщика по анализу эффективности выполнения задач
Вариант 2 планировщик не отслеживает эффективность выполнения задачи в рабочем потоке
Вариант 3 для задачи создается новый поток, не входящий в число рабочих потоков
Вариант 4 рабочий поток выполнения задачи получает низкий приоритет
Вариант 5 рабочий поток выполнения задачи получает высокий приоритет

Следующий фрагмент приводит к действиям планировщика:
 static void Main() 
 { 
 Thread thread = new Thread(() => { 
  f1(); 
  Task t = Task.Factory.StartNew(() => f2()); 
  }); 
 thread.Start(); 
 } 
(Отметьте один правильный вариант ответа.)
Вариант 1 методы f1 и f2 обрабатываются в одном рабочем потоке
Вариант 2 методы f1 обрабатывается в пользовательском потоке, метод f2 добавляется в глобальную очередь и обрабатывается одним из рабочих потоков
Вариант 3 метод f1 обрабатывается в пользовательском потоке, метод f2 добавляется в локальную очередь этого же потока
Вариант 4 методы f1 и f2 обрабатываются в одном пользовательском потоке

Свободный рабочий поток
(Отметьте один правильный вариант ответа.)
Вариант 1 уничтожается планировщиком
Вариант 2 просматривает локальные очереди рабочих потоков, если они пусты – обращается к глобальной очереди
Вариант 3 обращается к глобальной очереди, если она пуста – обращается к локальной очереди занятого рабочего потока
Вариант 4 переходит в спящее состояние

Для осуществления заимствования рабочим потоком Thread1 задачи из локальной очереди потока Thread2 необходимо соблюдение следующих условий:
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 глобальная очередь содержит элементы
Вариант 2 рабочий поток Thread1 свободен
Вариант 3 другие рабочие потоки заняты
Вариант 4 глобальная очередь не содержит элементов

Какой вывод наиболее вероятен для следующего фрагмента:
 static void Main() 
 { 
  Task t1 = Task.Factory.StartNew(() => 
 Console.Write(“A”)); 
 Task t2 = Task.Factory.StartNew(() => { 
 Task t3 = Task.Factory.StartNew(() => 
 Console.Write(“B”)); 
 Console.Write(“C”); 
 }); 
 } 
(Отметьте один правильный вариант ответа.)
Вариант 1 ACB
Вариант 2 ни один из перечисленных вариантов не возможен
Вариант 3 CBA
Вариант 4 BCA

Параметр PreferFairness позволяет
(Отметьте один правильный вариант ответа.)
Вариант 1 изменить дисциплину локальной очереди с LIFO на FIFO
Вариант 2 добавить задачу в конец локальной очереди рабочего потока
Вариант 3 выделить независимый поток для задачи
Вариант 4 ни один из перечисленных вариантов

Каким образом выделить для задачи независимый поток, не участвующий в обработке других задач пула?
(Отметьте один правильный вариант ответа.)
Вариант 1 использовать параметр ExecuteSynchronously при создании задачи
Вариант 2 использовать параметр LongRunning при создании задачи
Вариант 3 использовать параметр PreferFairness при создании задачи
Вариант 4 ни один из перечисленных вариантов

Вложенные задачи выполняются (с учетом действия всех стратегий планировщика):
(Отметьте один правильный вариант ответа.)
Вариант 1 ни одно из представленных утверждений не верно
Вариант 2 в том же рабочем потоке, что и родительская задача
Вариант 3 если являются дочерними, то выполняются в одном рабочем потоке.
Вариант 4 могут выполняться в разных рабочих потоках

Следующий фрагмент приводит к действиям планировщика:
 static void Main() 
 { 
 Thread thread = new Thread(() => { 
  
 Parallel.Invoke(f1, f2); 
 f3(); 
 }); 
 thread.Start(); 
 } 
(Отметьте один правильный вариант ответа.)
Вариант 1 методы f1, f2, f3 всегда обрабатываются в одном рабочем потоке
Вариант 2 методы f1,f2,f3 всегда обрабатываются в одном пользовательском потоке
Вариант 3 методы f1,f2,f3 добавляются в локальную очередь пользовательского потока
Вариант 4 >нет правильных вариантов

В родительской задаче tParent запускаются поочередно вложенные задачи tChild1 и tChild2. При каких условиях вложенная задача tChild1 может успеть завершиться раньше, чем задача tChild2?
(Отметьте один правильный вариант ответа.)
Вариант 1 свободный рабочий поток заимствует задачу tChild2 из локальной очереди
Вариант 2 задача tChild2 является менее вычислительно емкой, чем tChild1 (меньшее время выполнения)
Вариант 3 задача tChild1 ожидает завершения задачи tChild2 с помощью оператора Wait.
Вариант 4 задача tChild2 создана с опцией PreferFairness.

Задача t2.3 ожидает завершения задачи t2.2, находящейся в локальной очереди рабочего потока. Стратегия inlined execution приведет
(Отметьте один правильный вариант ответа.)
Вариант 1 задача t2.3 будет выгружена и добавлена в глобальную очередь
Вариант 2 задача t2.3 будет выгружена и добавлена в конец локальной очереди
Вариант 3 задача t2.2 будет выполняться в другом свободном рабочем потоке
Вариант 4 задача t2.2 будет выполняться в том же рабочем потоке, что и t2.3.

Для изменения порядка обработки вложенных задач, находящихся в локальной очереди потока, необходимо:
(Отметьте один правильный вариант ответа.)
Вариант 1 использовать параметр ExecuteSynchronously
Вариант 2 использовать параметр PreferFairness при создании задачи
Вариант 3 использовать параметр LongRunning
Вариант 4 не существует такой возможности

Следующий фрагмент приводит к действиям планировщика
 static void Main() 
 { 
  ThreadPool.QueueUserWorkItem(f1,);
  ThreadPool.QueueUserWorkItem(f2,);
  ThreadPool.QueueUserWorkItem(f3);
 } 
(Отметьте один правильный вариант ответа.)
Вариант 1 нет правильных вариантов
Вариант 2 методы f1, f2, f3 обрабатываются в трех созданных потоках, не входящих в пул рабочих потоков
Вариант 3 неявно созданные задачи, связанные с методами f1, f2, f3, помещаются в локальную очередь текущего потока
Вариант 4 неявно созданные задачи, связанные с методами f1, f2, f3, помещаются в глобальную очередь

Стратегия Inlined Execution применяется планировщиком
(Отметьте один правильный вариант ответа.)
Вариант 1 для запуска задач из локальной очереди потока, если текущая задача заблокирована вызовом ожидания
Вариант 2 для заимствования задач свободным потоком из очереди занятого потока
Вариант 3 для запуска задач из глобальной очереди, если текущая задача заблокирована
Вариант 4 для запуска задачи в независимом потоке

В каком случае не осуществляется заимствование задач из локальной очереди загруженного потока?
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 есть задачи в глобальной очереди
Вариант 2 задачи в локальной очереди созданы с опцией PreferFairness
Вариант 3 все рабочие потоки заняты обработкой
Вариант 4 режим WorkStealing выключен с помощью опций планировщика

Число рабочих потоков, участвующих при обработке задач, зависит от следующих факторов::
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 вычислительные возможности системы (число ядер)
Вариант 2 нет правильных ответов
Вариант 3 параметры пула потоков
Вариант 4 результаты обработки предыдущих задач

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


Операция извлечения Take для объекта типа BlockedCollection<T>, не содержащего элементы и без вызова CompleteAdding, приводит
(Отметьте один правильный вариант ответа.)
Вариант 1 метод возвращает null
Вариант 2 генерируется исключение
Вариант 3 метод возвращает false
Вариант 4 блокировка текущего потока

Задачи-продолжения позволяют:
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 реализовать обработчик отмены задач
Вариант 2 нет правильных вариантов
Вариант 3 запускать задачу при определенном статусе завершения предшествующей задачи
Вариант 4 запускать задачу при определенном статусе завершения предшествующей задачи

В каких случаях задача завершается со статусом Faulted
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 в дочерних задачах возникли исключения
Вариант 2 во вложенных задачах возникли исключения
Вариант 3 в задаче возникло исключение
Вариант 4 задача была отменена

Какой вывод для следующего фрагмента является наиболее вероятным:
 Task t = Task.Factory.StartNew( () => 
 { 
  Task t1 = Task.Factory.StartNew( () => 
  Console.Write (“1”)); 
  Task t2 = Task.Factory.StartNew( () => 
  Console.Write (“2”)); 
  Console.Write (“3”); 
 }); 
(Отметьте один правильный вариант ответа.)
Вариант 1 123
Вариант 2 ни один из перечисленных вариантов
Вариант 3 132
Вариант 4 321

Агрегированные вычисления могут осуществляться параллельно для следующих операторов
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 Max
Вариант 2 Min
Вариант 3 агрегированные вычисления осуществляются только последовательно
Вариант 4 Aggregate

Какой из перечисленных LINQ-операторов обладает наименьшей эффективностью распараллеливания:
(Отметьте один правильный вариант ответа.)
Вариант 1 Distinct
Вариант 2 Max
Вариант 3 Select
Вариант 4 Where

При возникновении необработанного исключения в задаче:
(Отметьте один правильный вариант ответа.)
Вариант 1 нет правильных ответов
Вариант 2 статус задачи Canceled
Вариант 3 статус задачи не определен
Вариант 4 статус задачи Faulted

Одновременный запуск нескольких задач (добавление в очередь готовых задач) осуществляется в следующих фрагментах кода:
(Отметьте один правильный вариант ответа.)
Вариант 1
   Task t1 = Task.Factory.StartNew(f1); Task t2 = Task.Factory.StartNew(f2);
   Task t3 = Task.Factory.StartNew(f3);
   Task.WaitAll(new Task[] {t1, t2, t3});
Вариант 2
   Parallel.Invoke(new Task[] {f1, f2, f3});
Вариант 3
   Task t1 = new Task(f1); Task t2 = new Task(f2); Task t3 = new Task(f3);
   Parallel.Invoke(t1, t2, t3);
Вариант 4
   Task t1 = new Task(f1); Task t2 = new Task(f2); Task t3 = new Task(f3);
   Task.StartAll(t1, t2, t3);
   Task.WaitAll(t1, t2, t3);

Какие средства синхронизации позволяют избежать «мертвой блокировки» ожидающих потоков при возникновении сбоя внутри критической секции?
(Отметьте один правильный вариант ответа.)
Вариант 1 lock
Вариант 2 AutoResetEvent
Вариант 3 Semaphore
Вариант 4 Mutex

При выполнении операции добавления Add для объекта типа BlockedCollection<T>, содержащего максимальное число элементов и без вызова CompleteAdding, происходит:
(Отметьте один правильный вариант ответа.)
Вариант 1 метод возвращает null
Вариант 2 блокировка текущего потока
Вариант 3 нет правильного ответа
Вариант 4 генерируется исключение

Разделение данных по диапазону осуществляется в следующих PLINQ-запросах:
(Отметьте один правильный вариант ответа.)
Вариант 1 разделение данных по диапазону осуществляется во всех PLINQ-запросах
Вариант 2 var q = ParallelEnumerable.Range(1, 1000).Where(i => i%5 == 0).Select(i=> i*i);
Вариант 3 var q = ParallelData.GroupBy(o.Key);
Вариант 4
>var q = Partitioner.Create(ParallelData, true)
 Where(item=>f(item)).Select(item=>f(item);

Выберете правильные утверждения
(Отметьте один правильный вариант ответа.)
Вариант 1 несколько задач могут выполняться в одном рабочем потоке
Вариант 2 ни одно из указанных утверждений не верно
Вариант 3 задача может выполняться в нескольких рабочих потоках
Вариант 4 каждая задача выполняется в одном рабочем потоке

Применение многопроцессного выполнения связано со следующими проблемами:
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 сбой одного процесса приводит к сбою всех процессов
Вариант 2 гонка данных
Вариант 3 взаимодействие процессов с помощью специальных средств
Вариант 4 накладные расходы, связанные с переключением контекста разных процессов

Сигнальные сообщения типа ManualResetEvent позволяют:
(Отметьте один правильный вариант ответа.)
Вариант 1 реализовать запуск только одного из ожидающих потоков
Вариант 2 реализовать взаимно-исключительный доступ к фрагменту кода
Вариант 3 реализовать одновременный запуск всех заблокированных потоков
Вариант 4 реализовать доступ заданного числа потоков к фрагменту кода

В чем преимущества использования пула потоков для параллельной обработки?
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 нет накладных расходов на создание и завершение потоков
Вариант 2 распределение рабочих элементов по потокам осуществляется автоматически
Вариант 3 пул потоков предоставляет встроенные механизмы ожидания завершения работы, механизм отмены
Вариант 4 рабочие потоки пула являются более легковесными объектами

Какой фрагмент кода гарантирует запуск метода f1 до запуска метода f2.
(Отметьте один правильный вариант ответа.)
Вариант 1
   Task t1 = new Task(f1);
   t1.Start();
   Thread.Sleep(500);
   f2();
Вариант 2
      Task t1 = new Task(f1);
      t1.Start();
   f2();
Вариант 3
   Task t1 = Task.Factory.StartNew(f1);
   f2();
Вариант 4 ни один из предложенных вариантов

В каких случаях не возникает проблема гонки данных
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 нет правильных вариантов
Вариант 2 два потока извлекают элементы из общего списка
Вариант 3 два потока добавляют элементы в коллекцию типа Dictionary
Вариант 4 несколько потоков устанавливают значение общей булевой переменной в true перед началом работы

В рабочей функции потока используется переменная SomeVal типа int. Переменная является локальной для каждого потока в следующих случаях:
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 переменная объявлена внутри класса, содержащего рабочую функцию потока
Вариант 2 переменная класса, используемого в рабочей функции, объявлена с модификатором private.
Вариант 3 переменная класса, используемого в рабочей функции, объявлена с атрибутом ThreadStaticAttribute
Вариант 4 переменная объявлена внутри рабочей функции потока

Для обработки исключений, возникающих в задаче, блок try обрамляет:
(Отметьте один правильный вариант ответа.)
Вариант 1 вызов метода запуска задачи t.Start()
Вариант 2 нет правильных вариантов
Вариант 3 вызов метода ожидания задачи t.Wait()
Вариант 4 объявление задачи Task t = new Task(..);

Метод WaitOne объекта синхронизации Semaphore не приводит к блокировке в случае
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 объект Semaphore установлен в ненулевое состояние с помощью метода Set
Вариант 2 вызову метода WaitOne предшествовал вызов Release с ненулевым значением аргумента
Вариант 3 объект Semaphore инициирован ненулевым начальным состоянием
Вариант 4 метод WaitOne всегда приводит к блокировке потоков в ожидании сигнала об освобождении объекта синхронизации

Для отмены задачи необходимо
(Отметьте один правильный вариант ответа.)
Вариант 1 вызвать метод Cancel для объекта типа CancellationTokenSource
Вариант 2 вызвать метод Abort для объекта типа Task
Вариант 3 вызвать метод Cancel для объекта типа Task
Вариант 4 вызвать метод Cancel для объекта типа CancellationToken

Выберете правильные утверждения
(Отметьте один правильный вариант ответа.)
Вариант 1 запуск задачи с помощью метода Start приводит к созданию потока
Вариант 2 нет правильных утверждений
Вариант 3 создание задачи приводит к созданию нового потока
Вариант 4 запуск задачи с помощью метода StartNew приводит к созданию потока

Какие операторы используются только в параллельных запросах
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 SelectMany
Вариант 2 Aggregate
Вариант 3 AsUnordered
Вариант 4 WithCancellation

При каких условиях поток находится в состоянии "Готовый"?
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 объект типа Thread запущен с помощью метода Start
Вариант 2 поток выполняется на процессоре (ядре процессора)
Вариант 3 выполняющийся поток выгружен по истечении кванта времени
Вариант 4 создан экземпляр класса Thread.

Выберете правильные утверждения
(Отметьте один правильный вариант ответа.)
Вариант 1 метод Task.Factory.StartNew запускает задачу в рабочем потоке и дожидается завершения работы
Вариант 2 метод Start добавляет задачу в очередь пула потоков
Вариант 3 метод Start запускает задачу в текущем потоке
Вариант 4 метод Task.Factoy.StartNew создает новый поток для задачи

Для ожидания завершения задачи типа Task<int> можно использовать
(Ответ считается верным, если отмечены все правильные варианты ответов.)
Вариант 1 вызов статического метода Task.WaitAll с указанием задачи в качестве параметра
Вариант 2 вызов метода Join для потока, в котором выполняется задача
Вариант 3 обращение к свойству Result
Вариант 4 вызов метода Wait

Какие средства синхронизации можно использовать для организации параллельного доступа нескольких потоков к ресурсу?
(Отметьте один правильный вариант ответа.)
Вариант 1 Semaphore
Вариант 2 Mutex
Вариант 3 lock
Вариант 4 AutoResetEvent