Главная /
Суперкомпьютерные технологии /
Параллельное программирование с помощью языка C#
Параллельное программирование с помощью языка C# - ответы на тесты Интуит
Правильные ответы выделены зелёным цветом.
Все ответы: Курс предназначен для практического введения в параллельное программирование (ПП) и знакомства с основными возможностями ПП на платформе .NET 4.0
Все ответы: Курс предназначен для практического введения в параллельное программирование (ПП) и знакомства с основными возможностями ПП на платформе .NET 4.0
Смотрите также:
Одновременный запуск нескольких задач (добавление в очередь готовых задач) осуществляется в следующих фрагментах кода:
(1)
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);
(2)
Task t1 = new Task(f1); Task t2 = new Task(f2); Task t3 = new Task(f3);
Parallel.Invoke(t1, t2, t3);
(3)
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});
(4)
Parallel.Invoke(new Task[] {f1, f2, f3});
Каким образом можно распараллелить следующий
var q = data.Select(item => f(item)).Where(o => p(o));
LINQ
-запрос?
(1) модификация запроса не требуется. Обработка запросов в
C#
4.0 автоматически распараллеливается.
(2) добавить модификатор
AsParallel
() после источника данных
(3) добавить модификатор
AsParallel
() в конец запроса
(4) использовать параметр
ParallelOptions
при выполнении запроса Select
(5) использовать параметр
ParallelOptions
при выполнении запроса в методе ToList
() или ToArray
() Какой вывод для следующего фрагмента является наиболее вероятным:
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) ни один из перечисленных вариантов
В каких случаях возникает проблема гонки данных:
(1) потоки осуществляют запись в разделяемую переменную
(2) один поток осуществляет запись в разделяемую переменную, а другой поток читает разделяемую переменную
(3) потоки увеличивают общий счетчик, выполняя оператор инкрементирования
(4) два потока добавляют элементы в один список типа очереди (
Queue
) При каких условиях поток находится в состоянии "Готовый"?
(1) создан экземпляр класса
Thread.
(2) объект типа
Thread
запущен с помощью метода Start
(3) поток выполняется на процессоре (ядре процессора)
(4) выполняющийся поток выгружен по истечении кванта времени
Какие средства синхронизации можно использовать для организации взаимно-исключительный доступ к разделяемому ресурсу?
(1)
Mutex
(2)
SemaphoreSlim
(3)
lock
(4)
ManualResetEvent
Выберете правильные утверждения
(1) каждая задача выполняется в одном рабочем потоке
(2) несколько задач могут выполняться в одном рабочем потоке
(3) задача может выполняться в нескольких рабочих потоках
(4) ни одно из указанных утверждений не верно
Реализация агрегированных вычислений с помощью метода
Parallel.For
(1) не требует использования блокировок
(2) метод
Parallel.For
используется только для распараллеливания независимых вычислений и не предназначен для агрегированных вычислений
(3) необходимость использования блокировок определяется алгоритмом агрегированных вычислений.
(4) требует использования блокировок
Блочное (динамическое) разделение данных осуществляется при выполнении следующего
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-запросах
Стратегия
Inlined
Execution
применяется планировщиком
(1) для запуска задач из локальной очереди потока, если текущая задача заблокирована вызовом ожидания
(2) для запуска задач из глобальной очереди, если текущая задача заблокирована
(3) для заимствования задач свободным потоком из очереди занятого потока
(4) для запуска задачи в независимом потоке
Выберете утверждения, соответствующие многоядерной архитектуре
(1) вычислительная система содержит несколько исполнительных устройств, работающих с общей памятью
(2) вычислительная система содержит одно исполнительное устройство и несколько блоков кэшируемой памяти
(3) вычислительная система содержит несколько исполнительных устройств, каждое из которых работает со своей оперативной памятью
(4) нет правильных ответов
Число рабочих потоков в пуле зависит от следующих факторов:
(1) возможности вычислительной системы (число процессоров/ядер)
(2) загруженность вычислительной системы
(3) параметры пула потоков
(4) число рабочих элементов, добавленных в пул потоков
Какие средства синхронизации можно использовать в нескольких приложениях?
(1)
Semaphore
(2)
SemaphoreSlim
(3)
Mutex
(4)
Monitor
В каких случаях задача завершается со статусом
Faulted
(1) во вложенных задачах возникли исключения
(2) задача была отменена
(3) в дочерних задачах возникли исключения
(4) в задаче возникло исключение
Для выполнения циклической обработки с большим числом итераций и малой вычислительной нагрузкой на каждой итерации эффективнее использовать:
(1)
Parallel.ForEach
с пакетной обработкой итераций
(2)
Parallel.ForEach
с блочной декомпозицей
(3)
Paralle.Invoke
(4) последовательный цикл
for.
Какие
LINQ
-операторы снижают эффективность распараллеливания:
(1)
WithMergeOptions(ParallelMergeOptions.NotBuffered)
(2)
AsOrdered
(3)
WithMergeOptions(ParallelMergeOptions.FullyBuffered)
(4)
WithCancellation
Для помещения вложенной задачи в глобальную очередь потока необходимо
(1) использовать параметр
LongRunning
при создании задачи
(2) использовать параметр
RunSynchronously
(3) вложенные задачи помещаются только в локальную очередь рабочего потока
(4) использовать параметр
PreferFairness
при создании задачи Выберете правильные утверждения, соответствующие системам с общей памятью
(1) для реализации параллельного выполнения программы обязательно применение средств синхронизации
(2) при выполнении параллельной программы может возникать ситуация гонки данных
(3) применение средств синхронизации позволяет решить проблему гонки данных
(4) синхронизация необходима только при выполнении программы в режиме разделения времени
В рабочей функции потока используется переменная
SomeVal
типа int.
Переменная является локальной для каждого потока в следующих случаях:
(1) переменная объявлена внутри рабочей функции потока
(2) переменная класса, используемого в рабочей функции, объявлена с модификатором
private.
(3) переменная класса, используемого в рабочей функции, объявлена с атрибутом
ThreadStaticAttribute
(4) переменная объявлена внутри класса, содержащего рабочую функцию потока
Какие средства синхронизации позволяют организовать барьерную синхронизацию (один поток дожидается завершения нескольких потоков):
(1)
Lock
(2)
Monitor
(3)
Mutex
(4)
SemaphoreSlim
Какой фрагмент кода гарантирует запуск метода
f1
до запуска метода f2.
(1)
Task t1 = new Task(f1);
t1.Start();
f2();
(2)
Task t1 = Task.Factory.StartNew(f1);
f2();
(3)
Task t1 = new Task(f1);
t1.Start();
Thread.Sleep(500);
f2();
(4) ни один из предложенных вариантов
Какой метод объекта
ParallelLoopState
позволяет досрочно выйти из цикла, но обработать все итерации с номером меньшим, чем заданный?
(1) Abort
(2) Break
(3) Stop
(4) не существует метода для досрочного выхода из параллельного цикла
Какие операторы выполняются последовательно в PLINQ-запросах
(1)
Min, Max
(2)
Aggregate
(3)
Distinct, GroupBy
(4) нет правильного ответа
Параметр
LongRunning
при создании задачи
(1) настраивает оптимизационные алгоритмы планировщика по анализу эффективности выполнения задач
(2) планировщик не отслеживает эффективность выполнения задачи в рабочем потоке
(3) для задачи создается новый поток, не входящий в число рабочих потоков
(4) рабочий поток выполнения задачи получает низкий приоритет
(5) рабочий поток выполнения задачи получает высокий приоритет
Выберете правильные утверждения, соответствующие свойству масштабируемости параллельного приложения
(1) приложение обеспечивает ускорение, равное предельному, согласно закону Амдала
(2) приложение может обрабатывать разные объемы данных
(3) приложение максимально задействует все имеющиеся вычислительные ресурсы
(4) нет правильных вариантов
Вызов метода
Thread.Sleep(0)
приводит к следующему:
(1) текущий поток снимается с процессора, не дожидаясь завершения выделенного кванта времени
(2) поток продолжает выполняться без промедлений
(3) текущий поток блокируется на бесконечное время
(4) генерируется исключение
Объект
Monitor
поддерживает следующие возможности
(1) попытка входа в критическую секцию в течение заданного интервала времени
(2) попытка входа в критическую секцию
(3) вход в критическую секцию нескольких потоков
(4) синхронизация на уровне операционной системы (межпроцессная синхронизация)
Задачи-продолжения позволяют:
(1) реализовать обработчик отмены задач
(2) запускать задачу при определенном статусе завершения предшествующей задачи
(3) запускать задачу при определенном статусе завершения предшествующей задачи
(4) нет правильных вариантов
При осуществлении пакетной обработки с помощью метода
Parallel.ForEach
делегат обработки вызывается
(1) на этапе инициализации
(2) на этапе выполнения обработки для каждого элемента
(3) только один раз для каждого потока на этапе выполнения обработки
(4) на этапе финальной редукции
Блок
try
для обработки исключений, возникающий при выполнении PLINQ
-запроса, обрамляет:
(1) определение запроса
(2) обращение к методам
ToList
, ToArray
, ToDictionary
(3) перебор элементов запроса в
for-
или foreach-цикле
(4) обработка исключений осуществляется внутри запроса
Следующий фрагмент приводит к действиям планировщика
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) нет правильных вариантов
Параллельный алгоритм состоит из двух подзадач и обеспечивает ускорение в два раза на двуядерной системе. Чему равна эффективность алгоритма системе с четырьмя процессорами?
(1) 0.25
(2) 0.5
(3) 1
(4) 2
В чем преимущества использования пула потоков для параллельной обработки?
(1) рабочие потоки пула являются более легковесными объектами
(2) нет накладных расходов на создание и завершение потоков
(3) распределение рабочих элементов по потокам осуществляется автоматически
(4) пул потоков предоставляет встроенные механизмы ожидания завершения работы, механизм отмены
Метод
WaitOne
объекта синхронизации Semaphore
не приводит к блокировке в случае
(1) метод
WaitOne
всегда приводит к блокировке потоков в ожидании сигнала об освобождении объекта синхронизации
(2) объект
Semaphore
инициирован ненулевым начальным состоянием
(3) вызову метода
WaitOne
предшествовал вызов Release
с ненулевым значением аргумента
(4) объект
Semaphore
установлен в ненулевое состояние с помощью метода Set
Для отмены задачи необходимо
(1) вызвать метод
Cancel
для объекта типа Task
(2) вызвать метод
Cancel
для объекта типа CancellationTokenSource
(3) вызвать метод
Cancel
для объекта типа CancellationToken
(4) вызвать метод
Abort
для объекта типа Task
При выполнении параллельной обработки с помощью метода
Parallel.Invoke
(1) число потоков может динамически изменяться
(2) число потоков задается в качестве аргумента метода
Parallel.Invoke
(3) число потоков может динамически изменяться, но не больше числа ядер вычислительной системы
(4) число потоков зависит от количества итераций и определяется на этапе инициализации обработки
Следующий запрос выполняется
var q = ParallelEnumerable.Range(1, N).Where(n=>true).Take(10).ToArray();
(1) параллельно
(2) последовательно
(3) параллельно или последовательно в зависимости от величины
N
(4) нет правильных вариантов
Свободный рабочий поток
(1) обращается к глобальной очереди, если она пуста – обращается к локальной очереди занятого рабочего потока
(2) просматривает локальные очереди рабочих потоков, если они пусты – обращается к глобальной очереди
(3) уничтожается планировщиком
(4) переходит в спящее состояние
Какое предельное ускорение может быть получено согласно закону Амдала для параллельной программы, содержащей 20% последовательного кода
(1) 2
(2) 5
(3) 10
(4) нет правильных ответов
Применение многопроцессного выполнения связано со следующими проблемами:
(1) гонка данных
(2) взаимодействие процессов с помощью специальных средств
(3) сбой одного процесса приводит к сбою всех процессов
(4) накладные расходы, связанные с переключением контекста разных процессов
Сигнальные сообщения типа
ManualResetEventSlim
позволяют:
(1) реализовать взаимно-исключительный доступ к фрагменту кода
(2) реализовать доступ заданного числа потоков к фрагменту кода
(3) реализовать одновременный запуск всех заблокированных потоков
(4) реализовать запуск только одного из ожидающих потоков
Статус задачи
WaitingForActivation
соответствует ситуации:
(1) задача добавлена в очередь пула потоков и готова к выполнению
(2) задача объявлена, но было вызова метода
Start
(3) задача дожидается завершения вложенных задач
(4) задача дожидается завершения предшествующих задач
Для осуществления заимствования рабочим потоком
Thread1
задачи из локальной очереди потока Thread2
необходимо соблюдение следующих условий:
(1) глобальная очередь содержит элементы
(2) глобальная очередь не содержит элементов
(3) рабочий поток
Thread1
свободен
(4) другие рабочие потоки заняты
Выберете правильные утверждения
(1) конкурентные коллекции позволяют безопасно добавлять и удалять элементы при одновременной работе в нескольких потоках
(2) конкурентные коллекции, не содержащие элементов, блокируют текущий поток при выполнении операции извлечения элемента
(3) применение конкурентных коллекций идентично применению обычных коллекций с блокировками типа lock
(4) нет правильных ответов
Вызов метода
CompleteAdding
для объекта типа BlockingCollection<T>
приводит к:
(1) блокировке текущего потока
(2) генерации исключения при добавлении элементов
(3) генерации исключения при извлечении элемента вне зависимости от числа элементов в коллекции
(4) освобождению потоков, заблокированных операцией извлечения элементов из пустой коллекции
Метод
Parallel.For
позволяет:
(1) выполнять агрегированные вычисления
(2) осуществлять параллельную обработку независимых итераций
(3) осуществлять досрочный выход из цикла
(4) распараллеливать произвольный
for-цикл
Для параллельного выполнения следующего
var q = Enumerable.Range(1, 100000).Select( i => f(i)).Where(d => d% 11);
LINQ
-запроса необходимо:
(1) добавить вызов метода
AsParallel
перед методом Select
(2) добавить вызов метода
AsParallel
в конец запроса
(3) добавить вызов метода
AsParallel
перед методом Range
(4) использовать параметр
ParallelOptions
при выполнении запроса в методе ToList
() или ToArray
() Какой вывод наиболее вероятен для следующего фрагмента:
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) ни один из перечисленных вариантов не возможен
В каких случаях не возникает проблема гонки данных
(1) один поток добавляет элементы в коллекцию типа
FIFO
(очередь), другой поток извлекает элементы из коллекции
(2) потоки инкрементируют значения, которые хранятся в разделяемом массиве; каждый поток работает с элементом по уникальному индексу
(3) потоки осуществляют запись в разделяемую переменную типа
int
(4) один поток осуществляет запись в разделяемую переменную типа
double
, другой поток читает значения В каких состояниях может находиться поток в процессе работы, если он не выполняет операций ввода-вывода, обращений к функциям ядра и не приостанавливается другими потоками?
(1) "Готовый"
(2) "Ожидающий"
(3) "Приостановленный"
(4) "Выполняющийся"
Какой инструмент синхронизации можно использовать для организации потокобезопасного увеличения счетчика целочисленного типа?
(1)
Monitor
(2)
Interlocked
(3)
SpinWait
(4)
ConcurrentBag
Выберете правильные утверждения
(1) создание задачи приводит к созданию нового потока
(2) запуск задачи с помощью метода
StartNew
приводит к созданию потока
(3) запуск задачи с помощью метода
Start
приводит к созданию потока
(4) нет правильных утверждений
Какие методы работают без явного объявления задач:
(1)
Parallel.Invoke;
(2)
Task.Factory.StartNew
(3)
ThreadPool.QueueUserWorkItem;
(4)
Parallel.ForEach
Хэш-секционирование для разделения данных используется в следующих фрагментах:
(1)
var q = ParallelData.GroupBy(o => o.Key
);
(2)
var q = ParallelData.Distinct()
;
(3)
var q = ParallelData.Wherede(o => f(o));
(4) ни в одном из фрагментов не применяется хэш-секционирование
Задача
t2.3
ожидает завершения задачи t2.2
, находящейся в локальной очереди рабочего потока. Стратегия inlined
execution
приведет
(1) задача
t2.2
будет выполняться в том же рабочем потоке, что и t2.3.
(2) задача
t2.2
будет выполняться в другом свободном рабочем потоке
(3) задача
t2.3
будет выгружена и добавлена в глобальную очередь
(4) задача
t2.3
будет выгружена и добавлена в конец локальной очереди Выберете правильные утверждения, соответствующие применению синхронизации
(1) применение синхронизации снижает эффективность параллельного приложения
(2) применение синхронизации позволяет обеспечить решение проблемы гонки данных
(3) синхронизация является обязательной в параллельных приложениях, использующих многопоточность
(4) применение синхронизации повышает эффективность параллельного приложения
Второй аргумент в вызове метода пула потоков задает:
ThreadPool.QueueUserWorkItem(f, 5);
(1) число потоков, которые будет выполнять метод
f
(2) время до запуска метода
f
(3) число копий метода
f
, которые добавляются в пул потоков
(4) аргумент метода
f
Какие средства синхронизации используют вызовы ядра операционной системы?
(1)
Mutex
(2)
ManualResetEvent
(3)
AutoResetEvent
(4)
Monitor
Родительская задача
ParentTask
завершается без исключений, во вложенной (не дочерней) задаче innerTask
возникает исключение. Статусы задач:
(1)
ParentTask.Status:
RanToCompletion
, innerTask.Status:
Faulted
(2)
ParentTask.Status:
Faulted
, innerTask.Status:
Faulted
(3)
ParentTask.Status:
Canceled
, innerTask.Status:
Faulted
(4)
ParentTask.Status:
Canceled
, innerTask.Status:
Canceled
Блочная (динамическая) декомпозиция позволяет эффективнее обрабатывать:
(1) итерации с малой вычислительной нагрузкой
(2) элементы структуры с равной вычислительной нагрузкой обработки каждого элемента
(3) элементы структуры с неравномерной вычислительной нагрузкой обработки каждого элемента
(4) блочная декомпозиция не является эффективной
Какие операторы используются только в параллельных запросах
(1)
AsUnordered
(2)
SelectMany
(3)
Aggregate
(4)
WithCancellation
Параметр
PreferFairness
позволяет
(1) выделить независимый поток для задачи
(2) изменить дисциплину локальной очереди с
LIFO
на FIFO
(3) добавить задачу в конец локальной очереди рабочего потока
(4) ни один из перечисленных вариантов
В каких случаях обеспечивается относительно равномерная загрузка потоков
(1) объем, выполняемой работы каждым потоком, одинаков
(2) осуществляется динамическая (блочная) декомпозиция обработки элементов
(3) потоки обрабатывают одинаковое число элементов общей структуры данных
(4) при функциональной декомпозиции выделяется число подзадач равное числу потоков
В рабочей функции потока используется переменная
SomeVal
типа int.
Переменная является общей в следующих случаях:
(1) переменная объявлена внутри рабочей функции потока
(2) переменная класса, используемого в рабочей функции, объявлена с модификатором
public.
(3) переменная класса, используемого в рабочей функции, объявлена с атрибутом
ThreadStaticAttribute
(4) переменная объявлена внутри класса, содержащего рабочую функцию потока
Какие средства синхронизации позволяют избежать «мертвой блокировки» ожидающих потоков при возникновении сбоя внутри критической секции?
(1)
lock
(2)
Semaphore
(3)
Mutex
(4)
AutoResetEvent
Обращение к свойству
Result
задачи, которая еще выполняется
(1) блокирует поток до завершения задачи
(2) генерирует исключение
(3) возвращает
null
(4) ни один из предложенных вариантов
Какой метод объекта
ParallelLoopState
позволяет досрочно выйти из цикла на заданной итерации, вне зависимости от того, какие итерации уже обработаны?
(1) Abort
(2) Stop
(3) Break
(4) не существует метода для досрочного выхода из параллельного цикла
Операторы агрегирования для объекта
ParallelQuery<T>
(1) выполняется параллельно
(2) выполняется последовательно
(3) могут выполняться как последовательно, так и параллельно
(4) объект
ParallelQuery<T>
не позволяет выполнять операторы агрегирования Если вложенные задачи выполняются в том же потоке, что и родительская задача, то порядок выполнения следующий:
(1) в том же порядке, в каком помещаются в локальную очередь
(2) в обратном порядке
(3) порядок выполнения вложенных задач в рабочем потоке является неопределенным
Оптимизация относительного расположения данных в памяти позволяет снять проблему:
(1) гонка данных
(2) ложное разделение кэша
(3) взаимоблокировка
(4) сбалансированность нагрузки
Для передачи управления другому потоку, конкурирующему за ядро процессора, на котором выполняется данный поток без прекращения его работы, можно использовать:
(1)
Thread.Yield
(2)
Thread.Sleep(0)
(3)
Thread.Stop
(4) нет средств для передачи управления без прекращения работы текущего потока
Класс
Monitor
поддерживает следующие возможности:
(1) приостановление потока, выполняющего критическую секцию, на заданный интервал времени
(2) попытка входа в критическую секцию в течение заданного интервала времени
(3) получение информации о заблокированных потоках
(4) получение информации о потоке, выполняющем критическую секцию
Задачи-продолжения запускаются после завершения задачи предшественника
(1) вне зависимости от исхода задачи
(2) если не было отмены задачи предшественника
(3) если не было исключения в предшествующей задаче
(4) в зависимости от статуса завершения предшествующей задачи и параметров задачи-продолжения
При осуществлении пакетной обработки с помощью метода
Parallel.ForEach
синхронизация необходима
(1) на этапе инициализации
(2) на этапе выполнения обработки
(3) на этапе финальной редукции
(4) необходимость применения синхронизации зависит от выполняемой обработки
Для отмены выполняющегося
PLINQ
-запроса можно использовать
(1) метод
Cancel
объекта CancellationTokenSource
(2) метод
Cancel
объекта ParallelQuery<T>
(3) метод
Stop
объекта ParallelQuery<T>
(4) не существует возможности отменить выполняющийся запрос
Следующий фрагмент приводит к действиям планировщика:
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.5. Чему равно ускорение алгоритма на четырех ядерной системе?
(1) 1.5
(2) 2
(3) 3
(4) 6
Для ожидания завершения обработки пользовательских рабочих элементов пулом потоков можно использовать
(1)
ThreadPool.Wait
(2)
ThreadPool.WaitAll
(3)
Thread.Join
(4) нет правильных вариантов
Объект
Semaphore
обладает следующими возможностями:
(1) освобождение заданного числа ожидающих потоков
(2) инициализация объекта с указанием максимального значения внутреннего счетчика
(3) инициализация объекта с указанием начального состояния внутреннего счетчика
(4) инициализация объекта с указанием минимального значения внутреннего счетчика
Для обработки исключений, возникающих в задаче, блок
try
обрамляет:
(1) вызов метода ожидания задачи
t.Wait()
(2) вызов метода запуска задачи
t.Start()
(3) объявление задачи
Task
t
= new
Task(..);
(4) нет правильных вариантов
При выполнении параллельной обработки с помощью метода
Parallel.For
(1) число потоков может динамически изменяться
(2) число потоков задается в качестве аргумента метода
Parallel.For
(3) число потоков определяется количеством итераций на этапе инициализации обработки
(4) число потоков может динамически изменяться, но не больше числа ядер вычислительной системы
Какой запрос выполняется последовательно
(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();
Число рабочих потоков, участвующих при обработке задач, зависит от следующих факторов::
(1) вычислительные возможности системы (число ядер)
(2) параметры пула потоков
(3) результаты обработки предыдущих задач
(4) нет правильных ответов
Какое предельное ускорение может быть получено согласно закону Амдала для параллельной программы, содержащей 40% параллельного кода
(1) 4
(2) 5
(3) 10
(4) нет правильных ответов
Преимущества использования многопоточности для параллельных вычислений по сравнению с применением многопроцессности связаны:
(1) потоки работают в едином адресном пространстве
(2) переключение потоков одного процесса занимает меньшее время по сравнению с переключением потоков разных процессов
(3) для взаимодействия потоков не требуется применения средств синхронизации
(4) сбой в одном потоке не приводит к сбою приложения
Сигнальные сообщения типа
AutoResetEvent
позволяют:
(1) реализовать взаимно-исключительный доступ к фрагменту кода
(2) реализовать доступ заданного числа потоков к фрагменту кода
(3) реализовать одновременный запуск всех заблокированных потоков
(4) реализовать запуск только одного из ожидающих потоков
Какие методы типа Task и объекта типа
Task
предполагают блокировку текущего потока до завершения задачи
(1)
t.Wait
(2)
Task.WaitAll
(3)
t.ContinueWith
(4)
Task.Factory.StartNew
В каком случае не осуществляется заимствование задач из локальной очереди загруженного потока?
(1) есть задачи в глобальной очереди
(2) режим
WorkStealing
выключен с помощью опций планировщика
(3) все рабочие потоки заняты обработкой
(4) задачи в локальной очереди созданы с опцией
PreferFairness
Выберете правильные утверждения
(1) конкурентные коллекции эффективнее обычных коллекций только в случае параллельной работы
(2) конкурентные коллекции функционируют как обычные коллекции при однопоточном использовании
(3) применение конкурентных коллекций идентично применению обычных коллекций с блокировками типа
lock
(4) нет правильных вариантов
При выполнении операции добавления
Add
для объекта типа BlockedCollection<T>
, содержащего максимальное число элементов и без вызова CompleteAdding
, происходит:
(1) блокировка текущего потока
(2) метод возвращает
null
(3) генерируется исключение
(4) нет правильного ответа
Методы
Parallel.For
, Parallel.Invoke
позволяют
(1) задать число потоков, которые используются для обработки пользовательских задач
(2) задать максимальное число потоков, которые используются для обработки пользовательских задач
(3) задать минимальное число потоков, которые используются для обработки пользовательских задач
(4) методы не позволяют регулировать число потоков
Каким образом можно распараллелить следующий
var q = from n in numbers
where n % 2 > 0
select n;
LINQ
-запрос?
(1) модификация запроса не требуется. Обработка запросов в
C#
4.0 автоматически распараллеливается.
(2) добавить вызов метода
AsParallel
() для источника данных
(3) добавить служебные слова
as
parallel
в конец запроса
(4) использовать параметр
ParallelOptions
при выполнении запроса в методе ToList
() или ToArray
() Следующий фрагмент кода приводит к действиям планировщика:
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) ни один из перечисленных вариантов
В каких случаях не возникает проблема гонки данных
(1) два потока извлекают элементы из общего списка
(2) два потока добавляют элементы в коллекцию типа
Dictionary
(3) несколько потоков устанавливают значение общей булевой переменной в
true
перед началом работы
(4) нет правильных вариантов
В какое состояние может перейти поток после завершения операции ввода-вывода, если до операции поток выполнялся?
(1) "Приостановленный"
(2) "Ожидающий"
(3) "Выполняющийся"
(4) "Готовый"
Какие средства синхронизации можно использовать для организации параллельного доступа нескольких потоков к ресурсу?
(1)
Semaphore
(2)
Mutex
(3)
AutoResetEvent
(4)
lock
Выберете правильные утверждения
(1) метод
Task.Factoy.StartNew
создает новый поток для задачи
(2) метод
Task.Factory.StartNew
запускает задачу в рабочем потоке и дожидается завершения работы
(3) метод
Start
запускает задачу в текущем потоке
(4) метод
Start
добавляет задачу в очередь пула потоков Реализация блочной декомпозиции при параллельной обработке с помощью метода
Parallel.ForEach
позволяет
(1) указать число элементов блока
(2) указать начальное число элементов блока
(3) указать относительные размеры блоков для разных потоков
(4) указать минимальное число элементов в блоке
Разделение данных по диапазону осуществляется в следующих
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);
Технология
Inlined
execution
предназначена для оптимизации выполнения:
(1) задач в глобальной очереди
(2) задач в локально очереди потока
(3) только дочерних вложенных задач
(4) долго выполняющихся задач
Выберете правильные утверждения, соответствующие системам с общей памятью
(1) для взаимодействия параллельных потоков не требуется специальных интерфейсов передачи сообщений
(2) для взаимодействия параллельных частей требуется применять средства синхронизации
(3) существует возможность параллелизма как на уровне потоков одного процесса, так и на уровне процессов
(4) обеспечивается параллелизм только на уровне приложений как разделение процессорного времени
Для выполнения пользовательских задач с помощью пула потоков необходимо:
(1) создать экземпляр класса
ThreadPool
(2) задать параметры пула потоков
(3) использовать метод для добавления рабочих элементов
QueueUserWorkItem
(4) использовать метод для начала работы пула
Start
Какой объект синхронизации можно использовать для предотвращения запуска нескольких копий одного приложения?
(1)
Monitor
(2)
Mutex
(3)
Interlocked
(4)
SemaphoreSlim
При возникновении необработанного исключения в задаче:
(1) статус задачи
Faulted
(2) статус задачи
Canceled
(3) статус задачи не определен
(4) нет правильных ответов
Декомпозиция по диапазону позволяет эффективнее обрабатывать:
(1) итерации с большой вычислительной нагрузкой
(2) элементы структуры с равной вычислительной нагрузкой обработки каждого элемента
(3) элементы структуры с неравномерной вычислительной нагрузкой обработки каждого элемента
(4) декомпозиция по диапазону не является эффективной
Какой из перечисленных
LINQ
-операторов обладает наименьшей эффективностью распараллеливания:
(1)
Where
(2)
Distinct
(3)
Max
(4)
Select
Для изменения порядка обработки вложенных задач, находящихся в локальной очереди потока, необходимо:
(1) использовать параметр
PreferFairness
при создании задачи
(2) использовать параметр
ExecuteSynchronously
(3) использовать параметр
LongRunning
(4) не существует такой возможности
Проблема ложного разделения кэша связана
(1) потоки используют разделяемую переменную
(2) потоки используют разные переменные, которые расположены в памяти физически близко
(3) потоки работают с большим объемом данных, превышающим размер кэша
(4) нет правильных ответов
Локальное хранилище потоков может использоваться для хранения
(1) только статические поля класса, доступного в рабочей функции потока
(2) только значимые типы (
value
types
)
(3) только встроенные типы
(4) нет правильных ответов
Какие средства синхронизации можно использовать для ожидания событий из другого потока?
(1)
AutoResetEvent
(2)
Semaphore
(3)
Mutex
(4)
lock
Объявление
Task
t2
= t1.ContinueWith(..)
гарантирует
(1) запуск задачи
t2
только после завершения задачи t1
(2) запуск задачи
t2
до завершения задачи t1
(3) запуск задачи
t2
при определенном статусе завершения задачи t1
(4) нет правильного ответа
Какому методу или методам соответствует оператор
break
при распараллеливании циклической обработки с помощью Parallel.For
?
(1) Abort
(2) Break
(3) Stop
(4) для параллельных циклов не существует оператора досрочного выхода
Агрегированные вычисления могут осуществляться параллельно для следующих операторов
(1)
Min
(2)
Max
(3)
Aggregate
(4) агрегированные вычисления осуществляются только последовательно
Каким образом выделить для задачи независимый поток, не участвующий в обработке других задач пула?
(1) использовать параметр
LongRunning
при создании задачи
(2) использовать параметр
PreferFairness
при создании задачи
(3) использовать параметр
ExecuteSynchronously
при создании задачи
(4) ни один из перечисленных вариантов
Параллельный алгоритм состоит из четырех подзадач, которые начинают выполняться одновременно. Время работы каждой подзадачи составляет: 1, 2, 3 и 4 мс соответственно. Чему равно общее время работы алгоритма, если затратами на подготовку подзадач и агрегирование результатов можно пренебречь?
(1) 2.5
(2) 3
(3) 4
(4) 10
Метод
Thread.Yield
игнорируется в случае:
(1) нет конкуренции за ядро, на котором выполняется текущий поток
(2) нет потоков с большим приоритетом, чем приоритет текущего потока
(3) приложение выполняется на одноядерном процессоре
(4) нет правильных ответов
Класс
Monitor
поддерживает следующие возможности:
(1) приостановление потока, выполняющего критическую секцию, и освобождение одного из заблокированных потоков
(2) попытка входа в критическую секцию в течение заданного интервала времени
(3) выполнение критической секции заданным числом потоков
(4) получение информации о числе заблокированных потоков
Для ожидания завершения задачи типа
Task<int>
можно использовать
(1) обращение к свойству
Result
(2) вызов метода
Wait
(3) вызов статического метода
Task.WaitAll
с указанием задачи в качестве параметра
(4) вызов метода
Join
для потока, в котором выполняется задача При осуществлении агрегированных вычислений с помощью метода
Parallel.For
синхронизация необходима
(1) на этапе инициализации
(2) на этапе выполнения обработки
(3) на этапе финальной редукции
(4) синхронизация не требуется
Можно ли выполнить досрочную остановку выполнения
PLINQ
-запроса?
(1) методы
Stop
и Break
объекта ParallelLoopState
(2) с помощью токена отмены
(3) не существует возможности досрочной остановки
(4) с помощью генерации исключения при обработке элементов
Вложенные задачи выполняются (с учетом действия всех стратегий планировщика):
(1) в том же рабочем потоке, что и родительская задача
(2) могут выполняться в разных рабочих потоках
(3) если являются дочерними, то выполняются в одном рабочем потоке.
(4) ни одно из представленных утверждений не верно
Параллельный алгоритм работает в два раза быстрее последовательного на четырех ядерной системе. Чему равна эффективность алгоритма?
(1) 0.5
(2) 1
(3) 2
(4) не хватает данных для расчета эффективности
Объект
ThreadPool
позволяет:
(1) автоматизировать распределение пользовательских задач по рабочим потокам пула
(2) получить информацию о распараллеливании выполнения пользовательских задач
(3) настраивать тип декомпозиции пользовательских задач
(4) нет правильных вариантов
Освобождение или захват семафора приводит к исключению в следующих случаях
(1) при освобождении семафора значение внутреннего счетчика превысило заданное максимальное значение
(2) при захвате семафора значение внутреннего счетчика превысило заданное максимальное значение
(3) при захвате семафора значение внутреннего счетчика стало меньше заданного минимального значения
(4) освобождение и захват семафоров не приводит к исключениям
Выберете правильные утверждения
(1) родительская задача всегда дожидается завершения вложенных задач
(2) родительская задача дожидается только вложенных задач, объявленных с параметром
AttachedToParent
(3) родительская задача дожидается только дочерних вложенных задач
(4) нет правильных утверждений
При выполнении параллельной обработки с помощью метода
Parallel.ForEach
(1) число потоков может динамически изменяться
(2) число потоков задается в качестве аргумента метода
Parallel.ForEach
(3) число потоков определяется количеством итераций на этапе инициализации обработки
(4) число потоков может динамически изменяться, но не больше числа ядер вычислительной системы
Какие запросы выполняются параллельно?
(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();
Следующий фрагмент приводит к действиям планировщика:
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) >нет правильных вариантов
Какое предельное ускорение может быть получено согласно закону Амдала для параллельной программы, содержащей 80% параллельного кода
(1) 8
(2) 5
(3) 16
(4) нет правильных ответов
Применение многопоточности для параллельных вычислений связано со следующими недостатками:
(1) для взаимодействия потоков требуется применение специальных средств обмена сообщениями
(2) для согласования поведения потоков необходимо применение средств синхронизации
(3) сбой в одном потоке приводит к сбою приложения
(4) многопоточное выполнение приложения связано с накладными расходами, превышающими расходы при многопроцессном выполнении
Сигнальные сообщения типа
ManualResetEvent
позволяют:
(1) реализовать взаимно-исключительный доступ к фрагменту кода
(2) реализовать доступ заданного числа потоков к фрагменту кода
(3) реализовать одновременный запуск всех заблокированных потоков
(4) реализовать запуск только одного из ожидающих потоков
Метод
Flatten
применяется для
(1) преобразования типа
AggregateException
в тип Exception
(2) назначения обработчиков конкретных исключений
(3) получения списка исключений, возникнувших при исполнении задач
(4) нет верных утверждений
В родительской задаче
tParent
запускаются поочередно вложенные задачи tChild1
и tChild2.
При каких условиях вложенная задача tChild1
может успеть завершиться раньше, чем задача tChild2?
(1) задача
tChild2
является менее вычислительно емкой, чем tChild1
(меньшее время выполнения)
(2) задача
tChild2
создана с опцией PreferFairness.
(3) свободный рабочий поток заимствует задачу
tChild2
из локальной очереди
(4) задача
tChild1
ожидает завершения задачи tChild2
с помощью оператора Wait.
Конкурентные коллекции
типа ConcurrentStack<T>, ConcurrentQueue<T>, ConcurrentBag<T>
можно создавать:
(1) все конкурентные коллекции можно создавать на базе соответствующих коллекций (
ConcurrentStack<T>
только на базе Stack<T>)
(2) на базе объектов любых типов, реализующих интерфейс
IEnumerable
(3) конкурентные коллекции нельзя создавать на базе других объектов
(4) нет правильных ответов
Операция извлечения
Take
для объекта типа BlockedCollection<T>
, не содержащего элементы и без вызова CompleteAdding, приводит
(1) блокировка текущего потока
(2) метод возвращает
null
(3) генерируется исключение
(4) метод возвращает
false