Главная /
Параллельное программирование с помощью языка C#
Параллельное программирование с помощью языка C# - ответы на тесты Интуит
Курс предназначен для практического введения в параллельное программирование (ПП) и знакомства с основными возможностями ПП на платформе .NET 4.0
Список вопросов:
- # Одновременный запуск нескольких задач (добавление в очередь готовых задач) осуществляется в следующих фрагментах кода:
- # Метод Parallel.For позволяет:
- # Методы Parallel.For, Parallel.Invoke позволяют
- # Реализация агрегированных вычислений с помощью метода Parallel.For
- # Какие методы работают без явного объявления задач:
- # Реализация блочной декомпозиции при параллельной обработке с помощью метода Parallel.ForEach позволяет
- # Для выполнения циклической обработки с большим числом итераций и малой вычислительной нагрузкой на каждой итерации эффективнее использовать:
- # Блочная (динамическая) декомпозиция позволяет эффективнее обрабатывать:
- # Декомпозиция по диапазону позволяет эффективнее обрабатывать:
- # Какой метод объекта ParallelLoopState позволяет досрочно выйти из цикла, но обработать все итерации с номером меньшим, чем заданный?
- # Какой метод объекта ParallelLoopState позволяет досрочно выйти из цикла на заданной итерации, вне зависимости от того, какие итерации уже обработаны?
- # Какому методу или методам соответствует оператор break при распараллеливании циклической обработки с помощью Parallel.For?
- # При осуществлении пакетной обработки с помощью метода Parallel.ForEach делегат обработки вызывается
- # При осуществлении пакетной обработки с помощью метода Parallel.ForEach синхронизация необходима
- # При осуществлении агрегированных вычислений с помощью метода Parallel.For синхронизация необходима
- # При выполнении параллельной обработки с помощью метода Parallel.Invoke
- # При выполнении параллельной обработки с помощью метода Parallel.For
- # При выполнении параллельной обработки с помощью метода Parallel.ForEach
- # Каким образом можно распараллелить следующий LINQ-запрос? var q = data.Select(item => f(item)).Where(o => p(o));
- # Для параллельного выполнения следующего LINQ-запроса необходимо: var q = Enumerable.Range(1, 100000).Select( i => f(i)).Where(d => d% 11);
- # Каким образом можно распараллелить следующий LINQ-запрос? var q = from n in numbers where n % 2 > 0 select n;
- # Блочное (динамическое) разделение данных осуществляется при выполнении следующего PLINQ-запроса:
- # Хэш-секционирование для разделения данных используется в следующих фрагментах:
- # Разделение данных по диапазону осуществляется в следующих PLINQ-запросах:
- # Какие LINQ-операторы снижают эффективность распараллеливания:
- # Какие операторы используются только в параллельных запросах
- # Какой из перечисленных LINQ-операторов обладает наименьшей эффективностью распараллеливания:
- # Какие операторы выполняются последовательно в PLINQ-запросах
- # Операторы агрегирования для объекта ParallelQuery<T>
- # Агрегированные вычисления могут осуществляться параллельно для следующих операторов
- # Блок try для обработки исключений, возникающий при выполнении PLINQ-запроса, обрамляет:
- # Для отмены выполняющегося PLINQ-запроса можно использовать
- # Можно ли выполнить досрочную остановку выполнения PLINQ-запроса?
- # Следующий запрос выполняется var q = ParallelEnumerable.Range(1, N).Where(n=>true).Take(10).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”); });
- # Какой вывод наиболее вероятен для следующего фрагмента: 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”); }); }
- # Следующий фрагмент кода приводит к действиям планировщика: static void Main() { .. Task t1 = Task.Factory.StartNew( () => SomeWork()); Task t2 = Task.Factory.StartNew( () => SoweWork()); .. }
- # Стратегия Inlined Execution применяется планировщиком
- # Задача t2.3 ожидает завершения задачи t2.2, находящейся в локальной очереди рабочего потока. Стратегия inlined execution приведет
- # Технология Inlined execution предназначена для оптимизации выполнения:
- # Для помещения вложенной задачи в глобальную очередь потока необходимо
- # Параметр PreferFairness позволяет
- # Для изменения порядка обработки вложенных задач, находящихся в локальной очереди потока, необходимо:
- # Параметр LongRunning при создании задачи
- # Если вложенные задачи выполняются в том же потоке, что и родительская задача, то порядок выполнения следующий:
- # Каким образом выделить для задачи независимый поток, не участвующий в обработке других задач пула?
- # Следующий фрагмент приводит к действиям планировщика static void Main() { ThreadPool.QueueUserWorkItem(f1,); ThreadPool.QueueUserWorkItem(f2,); ThreadPool.QueueUserWorkItem(f3); }
- # Следующий фрагмент приводит к действиям планировщика: static void Main() { Thread thread = new Thread(() => { f1(); Task t = Task.Factory.StartNew(() => f2()); }); thread.Start(); }
- # Вложенные задачи выполняются (с учетом действия всех стратегий планировщика):
- # Свободный рабочий поток
- # Число рабочих потоков, участвующих при обработке задач, зависит от следующих факторов::
- # Следующий фрагмент приводит к действиям планировщика: static void Main() { Thread thread = new Thread(() => { Parallel.Invoke(f1, f2); f3(); }); thread.Start(); }
- # Для осуществления заимствования рабочим потоком Thread1 задачи из локальной очереди потока Thread2 необходимо соблюдение следующих условий:
- # В каком случае не осуществляется заимствование задач из локальной очереди загруженного потока?
- # В родительской задаче tParent запускаются поочередно вложенные задачи tChild1 и tChild2. При каких условиях вложенная задача tChild1 может успеть завершиться раньше, чем задача tChild2?
- # В каких случаях возникает проблема гонки данных:
- # В каких случаях не возникает проблема гонки данных
- # В каких случаях не возникает проблема гонки данных
- # Выберете утверждения, соответствующие многоядерной архитектуре
- # Выберете правильные утверждения, соответствующие применению синхронизации
- # Выберете правильные утверждения, соответствующие системам с общей памятью
- # Выберете правильные утверждения, соответствующие системам с общей памятью
- # В каких случаях обеспечивается относительно равномерная загрузка потоков
- # Проблема ложного разделения кэша связана
- # Выберете правильные утверждения, соответствующие свойству масштабируемости параллельного приложения
- # Оптимизация относительного расположения данных в памяти позволяет снять проблему:
- # Параллельный алгоритм состоит из четырех подзадач, которые начинают выполняться одновременно. Время работы каждой подзадачи составляет: 1, 2, 3 и 4 мс соответственно. Чему равно общее время работы алгоритма, если затратами на подготовку подзадач и агрегирование результатов можно пренебречь?
- # Параллельный алгоритм состоит из двух подзадач и обеспечивает ускорение в два раза на двуядерной системе. Чему равна эффективность алгоритма системе с четырьмя процессорами?
- # Параллельный алгоритм состоит из четырех независимых подзадач, которые выполняются за одинаковое время. Ускорение алгоритма на двуядерной системе составляет 1.5. Чему равно ускорение алгоритма на четырех ядерной системе?
- # Параллельный алгоритм работает в два раза быстрее последовательного на четырех ядерной системе. Чему равна эффективность алгоритма?
- # Какое предельное ускорение может быть получено согласно закону Амдала для параллельной программы, содержащей 20% последовательного кода
- # Какое предельное ускорение может быть получено согласно закону Амдала для параллельной программы, содержащей 40% параллельного кода
- # Какое предельное ускорение может быть получено согласно закону Амдала для параллельной программы, содержащей 80% параллельного кода
- # При каких условиях поток находится в состоянии "Готовый"?
- # В каких состояниях может находиться поток в процессе работы, если он не выполняет операций ввода-вывода, обращений к функциям ядра и не приостанавливается другими потоками?
- # В какое состояние может перейти поток после завершения операции ввода-вывода, если до операции поток выполнялся?
- # Число рабочих потоков в пуле зависит от следующих факторов:
- # Второй аргумент в вызове метода пула потоков задает:ThreadPool.QueueUserWorkItem(f, 5);
- # Для выполнения пользовательских задач с помощью пула потоков необходимо:
- # В рабочей функции потока используется переменная SomeVal типа int. Переменная является локальной для каждого потока в следующих случаях:
- # В рабочей функции потока используется переменная SomeVal типа int. Переменная является общей в следующих случаях:
- # Локальное хранилище потоков может использоваться для хранения
- # Вызов метода Thread.Sleep(0) приводит к следующему:
- # Для передачи управления другому потоку, конкурирующему за ядро процессора, на котором выполняется данный поток без прекращения его работы, можно использовать:
- # Метод Thread.Yield игнорируется в случае:
- # В чем преимущества использования пула потоков для параллельной обработки?
- # Для ожидания завершения обработки пользовательских рабочих элементов пулом потоков можно использовать
- # Объект ThreadPool позволяет:
- # Применение многопроцессного выполнения связано со следующими проблемами:
- # Преимущества использования многопоточности для параллельных вычислений по сравнению с применением многопроцессности связаны:
- # Применение многопоточности для параллельных вычислений связано со следующими недостатками:
- # Какие средства синхронизации можно использовать для организации взаимно-исключительный доступ к разделяемому ресурсу?
- # Какой инструмент синхронизации можно использовать для организации потокобезопасного увеличения счетчика целочисленного типа?
- # Какие средства синхронизации можно использовать для организации параллельного доступа нескольких потоков к ресурсу?
- # Какие средства синхронизации можно использовать в нескольких приложениях?
- # Какие средства синхронизации используют вызовы ядра операционной системы?
- # Какой объект синхронизации можно использовать для предотвращения запуска нескольких копий одного приложения?
- # Какие средства синхронизации позволяют организовать барьерную синхронизацию (один поток дожидается завершения нескольких потоков):
- # Какие средства синхронизации позволяют избежать «мертвой блокировки» ожидающих потоков при возникновении сбоя внутри критической секции?
- # Какие средства синхронизации можно использовать для ожидания событий из другого потока?
- # Объект Monitor поддерживает следующие возможности
- # Класс Monitor поддерживает следующие возможности:
- # Класс Monitor поддерживает следующие возможности:
- # Метод WaitOne объекта синхронизации Semaphore не приводит к блокировке в случае
- # Объект Semaphore обладает следующими возможностями:
- # Освобождение или захват семафора приводит к исключению в следующих случаях
- # Сигнальные сообщения типа ManualResetEventSlim позволяют:
- # Сигнальные сообщения типа AutoResetEvent позволяют:
- # Сигнальные сообщения типа ManualResetEvent позволяют:
- # Выберете правильные утверждения
- # Выберете правильные утверждения
- # Конкурентные коллекции типа ConcurrentStack<T>, ConcurrentQueue<T>, ConcurrentBag<T> можно создавать:
- # Вызов метода CompleteAdding для объекта типа BlockingCollection<T> приводит к:
- # При выполнении операции добавления Add для объекта типа BlockedCollection<T>, содержащего максимальное число элементов и без вызова CompleteAdding, происходит:
- # Операция извлечения Take для объекта типа BlockedCollection<T>, не содержащего элементы и без вызова CompleteAdding, приводит
- # Выберете правильные утверждения
- # Выберете правильные утверждения
- # Выберете правильные утверждения
- # В каких случаях задача завершается со статусом Faulted
- # Родительская задача ParentTask завершается без исключений, во вложенной (не дочерней) задаче innerTask возникает исключение. Статусы задач:
- # При возникновении необработанного исключения в задаче:
- # Какой фрагмент кода гарантирует запуск метода f1 до запуска метода f2.
- # Обращение к свойству Result задачи, которая еще выполняется
- # Объявление Task t2 = t1.ContinueWith(..) гарантирует
- # Задачи-продолжения позволяют:
- # Задачи-продолжения запускаются после завершения задачи предшественника
- # Для ожидания завершения задачи типа Task<int> можно использовать
- # Для отмены задачи необходимо
- # Для обработки исключений, возникающих в задаче, блок try обрамляет:
- # Выберете правильные утверждения
- # Статус задачи WaitingForActivation соответствует ситуации:
- # Какие методы типа Task и объекта типа Task предполагают блокировку текущего потока до завершения задачи
- # Метод Flatten применяется для