ДОКЛАДЫ, День 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 очереди с приоритетами

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


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

0930 - 1015

1030 - 1115

1130 - 1215

1230 - 1315

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

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

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

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

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


Роль контекстов синхронизации. Разбор строения и назначения существующих, Разработка собственных контекстов синхронизации.

Модели асинхронного кода

Доклад повествует про все модели асинхронного кода на платформе .NET, назначение каждой из них и их использование. Рассмотрим как примеры использования, так и примеры разработки с их использованием.
1315 Обед
общение по докладам
1415


1415 - 1500


1515 - 1600


1615 - 1700


1715 - 1800

TaskSchedulers. TAP.

Понимание модели TAP мы начнём с разбора TaskScheduler, ThreadPoolTaskScheduler, и многих других. После данного доклада вы сможете легко сформировать ТЗ к планировщику задач и разработать свой собственный.

Task, Task<T>

В рамках доклада мы рассмотрим исходный текст Task и не на пальцах, а на живом коде поймём все шаги его работы. Почему асинхронный вызов может привести к синхронному, а синхронный - к асинхронному и голоданию потока.

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

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

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

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




1815 - 1900


1915 - 2000



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

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

Microsoft.VisualStudio.Threading

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