18 апреля 2020 в Санкт-Петербурге и 16 мая в Москве пройдёт седьмая мини-конференция по платформе .NET CLRium #7. В этот раз мы будем и говорить и заниматься практикой многопоточного кода. Как и в прошлый раз, все доклады будут придерживаться единой линии повествования. В шестом CLRium мы поднаторели в теории и узнали много нового относительно планировщика потоков, блокировок и неблокирующих алгоритмов. В платформе .NET изучили контексты синхронизации, планировщики задач, как работают сами задачи, async/await и типичные ошибки при его использовании… Мы изучили вообще всё, чтобы уверенно начать заниматься практическими задачами.
В CLRium #7 мы перейдём к практике. Наша программа, наконец, окончательно готова: мы разработали матрицу докладов, которые построены так, что последующие доклады логически вытекают из предыдущих. А кроме самих докладов по желанию будет дана практическая работа на дом, в рамках которой вы приобретете опыт работы над задачами совместно: группами по несколько человек (контролируемых координатором).
При планировании семинара мы решили пойти на эксперимент: ввести полноценную практику. Ведь можно долго рассуждать, как заниматься распараллеливанием алгоритмов, но так и не начать этого делать. С одной стороны — страшно, а с другой — не было задач чтобы было понимание, можно это распараллелить или нет. Поэтому линия нашего семинара будет такова:
Архитектурный блок докладов:
- Мы начнём с самого высокого уровня: архитектуры системы в общем. С высоты птичьего полёта будем учиться принимать решения самого верхнего уровня. Что — параллелить известными решениями типа RabbtMQ, а что — самостоятельно. Будем решать вопросы с точки зрения архитектуры;
- Далее мы будем учиться предсказывать производительность кода если мы всё-таки решимся делать код многопотоным. Согласитесь: важно иметь точное представление о конечном результате прежде чем бросаться что-либо делать;
- После того как мы разработали наши алгоритмы, необходимо обрести понимание того, что мы получили: проанализировать производительность нашего кода. Протестировать его. Обучением этого мы и займемся в рамках третьего доклада;
- Следующий вопрос — научиться видеть решение в задаче. Т.е. по самой задаче уже примерно понимать, как мы будем параллелить наш код. Этого можно достичь изучив ряд существующих решений: в некотором смысле шаблонов, при помощи которых можно легко получить готовое решение из постановки задачи;
Блок докладов, посвященный синхронизациям
- Разобравшись с архитектурными вопросами, мы начнём погружаться в разработку стратегий работы с блокировками. Блокировки важны и их понимание приведёт вас к высокопроизводительному коду;
- Практика разработки и анализа неблокирующих алгоритмов — наша следующая тема. Работая в паре, блокирующие и неблокирующие алгоритмы дадут вам максимальную загрузку процессора наиболее полезными расчётами;
Инструментарий
- В докладе "Работа в модели async/await: полностью и частично-асинхронный код" мы ответим на многие вопросы, которые пугают разработчика: как архитектурно правильно стартовать async/await код? Если библиотека или какой-либо код используют async/await, что делать вызывающему? Все вызывающие делать async? Как это остановить? И многие другие.
- Также мы раскроем вопросы использования библиотеки Rx.NET: linq-like библиотеке обработки потоковых данных (например, обработка сообщений. В т.ч. от UI). Мощнейшая библиотека, в неопытных руках становящаяся оружием массового поражения кода… Но в руках знающих — сверхинструментарием, позволяющем решать задачи в очень короткий срок.
- И последняя тема — наконец-то вышедшая в свет библиотека JetBrains.Lifetimes. Я немного об этом говорил ранее. Но теперь можно рассказать во-первых намного подробнее, а во-вторых — в многопоточной среде.
Программа семинара получилась законченной и если учесть практику, фактически стала обучающим курсом по теме многопоточки в среде .NET.
Контакты
- Сайт CLRium #7: Concurrency & Parallelism на практике
sunex.development@gmail.com
+7 (921) 948-16-08