ДОКЛАДЫ, День 1


Санкт-Петербург, 29-30 ноября 2019 года. Москва, 06-07 декабря 2019 года

900 Кофе-брейк
сборы перед началом семинара
930

0930 - 1015

1030 - 1115

1130 - 1215

1230 - 1315

Операционная система: процессы. Их состав, старт, останов
  • Описание, что есть процесс, что он в себе инкапсулирует;
  • Виды процессов;
  • Как происходит старт процесса: что инициализируется, какие процессы происходят при этом;
  • Завершение процесса. Обязательные шаги при завершении процесса;
  • Загрузка динамических библиотек
  • Режим ядра, пользовательский режим;

Операционная система: потоки, диспетчеризация pt.1
  • Рождение потока: состав структур данных, образующих поток;
  • Диспетчеризация потоков, сценарии планирования, кванты времени
  • Динамические, фиксированные кванты
  • Приоретизация foreground процессов

Операционная система: потоки, диспетчеризация pt.2
  • Повышение приоритета
  • Переключение контекста
  • Сценарии планирования
  • Потоки простоя
  • Приостановка потока
  • Замораживание
  • Выбор потока

Диспетчеризация на SMT/NUMA ситсемах
  • SMT системы
  • NUMA системы
  • Thread Affinity
  • Балансировка и масштабируемость планировщика
  • Идеальный процессор, узел
  • Выбор потока в SMT/NUMA системах
1315 Обед
общение по докладам
1415


1415 - 1500


1515 - 1600


1615 - 1700


1715 - 1800

Ручная работа со стеком и контекстом потока
  • Рассмотрим process-independent контекст потока
  • Рассмотрим строение стека потока в .NET
  • Проведём имитацию вызовов методов в потоке
  • Проведем дублирование оконечной части потока в другой поток

Примитивы синхронизации и их квантовый график

Каждый из примитивов синхронизации будет рассмотрен с точки зрения реальной работы: на графике использования квантов потоками как на одноядерной, на многоядерной, так и на NUMA системах. Это даст полноценное понимание, когда можно использовать Kernel-Space примитивы, когда User-Space, а когда - гибридные. Будут рассмотрены сценарии длинной блокировки, средней по времени, короткой и серии сверхкоротких блокировок.

Строение Monitor.TryEnter()/.Enter()/.Leave()

Как устроен lock() и во что он разворачивается, наверное, знает уже каждый. Но не каждый знает, как работает Monitor.

В данном докладе мы рассмотрим исходники этого класса и разберем по полочкам все его механизмы. А там есть на что посмотреть: это гибридный примитив синхронизации, который в лучшем случае блокирует на User-Space, в худшем - уходя в Kernel Space через семафор. Борется с lock convoy/starvation и вмещает в себя все то, что стоит понять, чтобы научиться писать собственные примитивы синхронизации.

Lock-free: строение и анализ
  • Плюсы и минусы синхронизации на блокировках
  • Неблокирующая синхронизация
  • lock-free коллекции, lock-based синхронизация
  • Как доказать правильность работы - линеаризация




1815 - 1900


1915 - 2000



Lock-free: от теории к практике
  • Ставим ТЗ, первая итерация разработки
  • Изменяем ТЗ по результатам работы
  • Переходим к lock-free очереди с приоритетами

Параллельные алгоритмы: принципы построения

Мотивация: с одной стороны - по нагрузке (исторически)
  • Вычислительная нагрузка - численные расчеты.
  • Вычисления нагруженные данными - данных становиться все больше, надо их быстро обрабатывать.
Мотивация: со стороны архитектура вычислительных систем:
  • Многопроцессорные, многоядерные системы
  • Системы с общей памятью (UMA, NUMA)
  • Системы с распределенной памятью (в первую очередь разного рода кластеры)
Анализ алгоритма
Пример
Шаблоны параллелизации
2000 Завершение первого дня 2000
ДОКЛАДЫ, День 2


900 Кофе-брейк
сборы перед началом семинара
930

0930 - 1015

1030 - 1115

1130 - 1215

1230 - 1315

Функциональный подход

  • Вводная: Основная проблема при параллелизме - синхронизация потоков. В функциональном походе этой проблемы нет, т.к. нет переменных.
  • Состояние в ФП. Функциональные коллекции. Пример функционального стека, очереди и дерева.
  • Чистые функции в ФП, комбинация, отложенное вычисление.
  • Шаблоны параллельного программирования и их реализация в функциональном виде: Fork/Join, Map/Reduce, реактивная модель, реактивная модель на основе агентов.
  • Правильный выбор конкурентной модели программирования .

Контексты синхронизации

Роль контекстов синхронизации, назначение, их разработка

Параллелизация по данным: PLINQ

PLINQ и MapReduce. PLINQ и чистые функции, изоляция и контроль побочных эффектов. Аггрегирование, сокращение и усечение данных. Свёртка. Разработка Map и Reduce.

Как устроен и работает PLINQ

Мы заглянем во внутренности PLINQ: как устроена его архитектура, как работает библиотека классов. Рассмотрим работу подкапотного пространства чтобы интуитивно понимать, что происходит, когда мы пишем тот или иной код.
1315 Обед
общение по докладам
1415


1415 - 1500


1515 - 1600


1615 - 1700


1715 - 1800

TPL и Async/Await

Мы поговорим про библиотеку TPL, её составные части и решаемые задачи. От описания библиотеки перейдем на описание инфраструктуры и задач async/await

Машина состояний async/await

Во что разворачивается машина сосотояний async/await? Как она устроена? Как по внешнему виду async/await метода понять, как он будет устроен на самом деле и как он будет работать? Обо всём этом мы поговорим в данном докладе.

Распространённые ошибки в разработке async/await кода

В данном докладе будут рассмотрены типичные ошибки в разработке async/await кода и разбор причин их возникновения: некорректность вызова ConfigureAwait, deadlocks, и прочие.

ValueTask: причины введения, сценарии использовния

  1. Описание проблематики Task в рамках ValueTask
  2. ValueTask и синхронное завершение
  3. ValueTask и асинхронное завершение
  4. Non-generic ValueTasks
  5. Реализация IValueTaskSource
  6. Правильная модель использования ValueTasks
  7. Должны ли все новые асинхронные API возвращать ValueTask?




1815 - 1900


1915 - 2000



Microsoft.VisualStudio.Threading

Возможности, примитивы, сравнение с system.threading:
  1. AsyncSemaphore
  2. AsyncReaderWriterLock+Upgrading
  3. AsyncManualResetEvent
  4. Как работают, есть ли блокировки
AsyncQueue: чем не устраивает ConcurentQueue?
Joinable task, преимущества для создания UI-приложений

Intrisics in .NET
  • Какие проблемы решались, когда вводили Intrisics;
  • Какие связки существуют? Mono, .NET, Core;
  • Примеры реализации в коде, замер бенчмарками;
  • Ограничения на разрабатываемый код;
2000 Завершение семинара 2000