Главная / Программирование /
Параллельное программирование с помощью языка C# / Тест 16
Параллельное программирование с помощью языка C# - тест 16
Упражнение 1:
Номер 1
Какой вывод для следующего фрагмента является наиболее вероятным:
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) 132 
 (3) 321 
 (4) ни один из перечисленных вариантов 
Номер 2
Какой вывод наиболее вероятен для следующего фрагмента:
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) BCA 
 (3) CBA 
 (4) ни один из перечисленных вариантов не возможен 
Номер 3
Следующий фрагмент кода приводит к действиям планировщика:
static void Main()
{
..
Task t1 = Task.Factory.StartNew( () =>
SomeWork());
Task t2 = Task.Factory.StartNew( () =>
SoweWork());
..
}
Ответ:
 (1) задачи t1 и t2 помещаются в глобальную очередь пула потоков 
 (2) задачи t1 и t2 помещаются в одну и ту же локальную очередь рабочего потока 
 (3) задачи t1 и t2 помещаются в локальные очереди разных рабочих потоков 
 (4) ни один из перечисленных вариантов 
Упражнение 2:
Номер 1
Стратегия Inlined Execution применяется планировщиком
Ответ:
 (1) для запуска задач из локальной очереди потока, если текущая задача заблокирована вызовом ожидания 
 (2) для запуска задач из глобальной очереди, если текущая задача заблокирована 
 (3) для заимствования задач свободным потоком из очереди занятого потока 
 (4) для запуска задачи в независимом потоке 
Номер 2
Задача t2.3 ожидает завершения задачи t2.2, находящейся в локальной очереди рабочего потока. Стратегия inlined execution приведет
Ответ:
 (1) задача t2.2 будет выполняться в том же рабочем потоке, что и t2.3. 
 (2) задача t2.2 будет выполняться в другом свободном рабочем потоке 
 (3) задача t2.3 будет выгружена и добавлена в глобальную очередь 
 (4) задача t2.3 будет выгружена и добавлена в конец локальной очереди 
Номер 3
Технология Inlined execution предназначена для оптимизации выполнения:
Ответ:
 (1) задач в глобальной очереди 
 (2) задач в локально очереди потока 
 (3) только дочерних вложенных задач 
 (4) долго выполняющихся задач 
Упражнение 3:
Номер 1
Для помещения вложенной задачи в глобальную очередь потока необходимо
Ответ:
 (1) использовать параметр LongRunning при создании задачи 
 (2) использовать параметр RunSynchronously 
 (3) вложенные задачи помещаются только в локальную очередь рабочего потока 
 (4) использовать параметр PreferFairness при создании задачи  
Номер 2
Параметр PreferFairness позволяет
Ответ:
 (1) выделить независимый поток для задачи 
 (2) изменить дисциплину локальной очереди с LIFO на FIFO  
 (3) добавить задачу в конец локальной очереди рабочего потока 
 (4) ни один из перечисленных вариантов 
Номер 3
Для изменения порядка обработки вложенных задач, находящихся в локальной очереди потока, необходимо:
Ответ:
 (1) использовать параметр PreferFairness при создании задачи 
 (2) использовать параметр ExecuteSynchronously 
 (3) использовать параметр LongRunning 
 (4) не существует такой возможности 
Упражнение 4:
Номер 1
Параметр LongRunning при создании задачи
Ответ:
 (1) настраивает оптимизационные алгоритмы планировщика по анализу эффективности выполнения задач 
 (2) планировщик не отслеживает эффективность выполнения задачи в рабочем потоке 
 (3) для задачи создается новый поток, не входящий в число рабочих потоков 
 (4) рабочий поток выполнения задачи получает низкий приоритет 
 (5) рабочий поток выполнения задачи получает высокий приоритет 
Номер 2
Если вложенные задачи выполняются в том же потоке, что и родительская задача, то порядок выполнения следующий:
Ответ:
 (1) в том же порядке, в каком помещаются в локальную очередь 
 (2) в обратном порядке 
 (3) порядок выполнения вложенных задач в рабочем потоке является неопределенным 
Номер 3
Каким образом выделить для задачи независимый поток, не участвующий в обработке других задач пула?
Ответ:
 (1) использовать параметр LongRunning при создании задачи 
 (2) использовать параметр PreferFairness при создании задачи 
 (3) использовать параметр ExecuteSynchronously при создании задачи  
 (4) ни один из перечисленных вариантов 
Упражнение 5:
Номер 1
Следующий фрагмент приводит к действиям планировщика
static void Main()
{
ThreadPool.QueueUserWorkItem(f1,);
ThreadPool.QueueUserWorkItem(f2,);
ThreadPool.QueueUserWorkItem(f3);
}
Ответ:
 (1) неявно созданные задачи, связанные с методами f1, f2, f3, помещаются в локальную очередь текущего потока 
 (2) неявно созданные задачи, связанные с методами f1, f2, f3, помещаются в глобальную очередь 
 (3) методы f1, f2, f3 обрабатываются в трех созданных потоках, не входящих в пул рабочих потоков 
 (4) нет правильных вариантов 
Номер 2
Следующий фрагмент приводит к действиям планировщика:
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 добавляется в локальную очередь этого же потока 
Номер 3
Вложенные задачи выполняются (с учетом действия всех стратегий планировщика):
Ответ:
 (1) в том же рабочем потоке, что и родительская задача 
 (2) могут выполняться в разных рабочих потоках  
 (3) если являются дочерними, то выполняются в одном рабочем потоке.  
 (4) ни одно из представленных утверждений не верно 
Упражнение 6:
Номер 1
Свободный рабочий поток
Ответ:
 (1) обращается к глобальной очереди, если она пуста – обращается к локальной очереди занятого рабочего потока 
 (2) просматривает локальные очереди рабочих потоков, если они пусты – обращается к глобальной очереди 
 (3) уничтожается планировщиком 
 (4) переходит в спящее состояние 
Номер 2
Число рабочих потоков, участвующих при обработке задач, зависит от следующих факторов::
Ответ:
 (1) вычислительные возможности системы (число ядер) 
 (2) параметры пула потоков 
 (3) результаты обработки предыдущих задач 
 (4) нет правильных ответов 
Номер 3
Следующий фрагмент приводит к действиям планировщика:
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) >нет правильных вариантов 
Упражнение 7:
Номер 1
Для осуществления заимствования рабочим потоком Thread1 задачи из локальной очереди потока Thread2 необходимо соблюдение следующих условий:
Ответ:
 (1) глобальная очередь содержит элементы 
 (2) глобальная очередь не содержит элементов 
 (3) рабочий поток Thread1 свободен 
 (4) другие рабочие потоки заняты 
Номер 2
В каком случае не осуществляется заимствование задач из локальной очереди загруженного потока?
Ответ:
 (1) есть задачи в глобальной очереди 
 (2) режим WorkStealing выключен с помощью опций планировщика 
 (3) все рабочие потоки заняты обработкой 
 (4) задачи в локальной очереди созданы с опцией PreferFairness 
Номер 3
В родительской задаче tParent запускаются поочередно вложенные задачи tChild1 и tChild2. При каких условиях вложенная задача tChild1 может успеть завершиться раньше, чем задача tChild2?
Ответ:
 (1) задача tChild2 является менее вычислительно емкой, чем tChild1 (меньшее время выполнения) 
 (2) задача tChild2 создана с опцией PreferFairness. 
 (3) свободный рабочий поток заимствует задачу tChild2 из локальной очереди 
 (4) задача tChild1 ожидает завершения задачи tChild2 с помощью оператора Wait.