Следующий фрагмент кода приводит к действиям планировщика:
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 настраивает оптимизационные алгоритмы планировщика по анализу эффективности выполнения задач
Вариант 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 добавляется в глобальную очередь и обрабатывается одним из рабочих потоков
Вариант 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 позволяет
(Отметьте один правильный вариант ответа.)
Вариант 2 добавить задачу в конец локальной очереди рабочего потока
Вариант 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?
(Отметьте один правильный вариант ответа.)
Вариант 2 задача tChild2 является менее вычислительно емкой, чем tChild1 (меньшее время выполнения)
Вариант 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
Вариант 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”);
});
(Отметьте один правильный вариант ответа.)
Вариант 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);
Какие средства синхронизации позволяют избежать «мертвой блокировки» ожидающих потоков при возникновении сбоя внутри критической секции?
(Отметьте один правильный вариант ответа.)
Вариант 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.
(Отметьте один правильный вариант ответа.)
Вариант 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 обрамляет:
(Отметьте один правильный вариант ответа.)
Вариант 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