CLRium #6: Concurrency & Parallelism. Обучение магии распараллеливания задач
Наша команда по-настоящему взбудоражена: ведь мы находимся в стадии производства сложнейшего для нас семинара среди всех нами созданных: семинара по многопоточке, конкурентности и прочим смежным вопросам. Мы немного боимся: мы создали целый огромный процесс внутренних согласований докладов, источников информации, вычитываем, сверяем… исправляем… и всё это для того чтобы создать самый полезный семинар из всех проведенных.
Наша задача звучит очень просто: за два полных дня научить вас всем слоям многопоточки.
Программа первого дня
- Мы начнём со слоя операционной системы. 6 типов процессов, потоки, упомянем волокна (и объясним, почему их нет в .NET). Два больших доклада, которые по косточкам разложат всё, что есть в операционной системе;
- После операционной системы мы поговорим про механики CLR. Она имеет множество механизмов, на основании которых работает множество классов BCL;
- Далее вы пойдёте на обед, чтобы улегся первый слой информации;
- После обеда мы очень плотно возьмёмся за слой BCL. Тут и примитивы синхронизации. И сложность и важность сложности алгоритмов и контексты синхронизации. В общем, два добротнейших доклада. Уже на этом этапе вы почувствуете, что ваши вложения окупятся как минимум на текущем проекте, а в перспективе — на любом собеседовании;
- Третья тема первого дня — lock-free алгоритмы. Это — важнейшая часть наших знаний о многопоточке. Алгоритмы, которые работают без блокировок. И на мой скромный взгляд, их лучше всего не учить. Их надо понимать, как они работают. Этим мы и займёмся: для начала разберемся, как ставить самому себе ТЗ на выбор алгоритма исходя из требований. Далее разберем, как работают два алгоритма и, наконец, разработаем самостоятельно еще один.
Программа второго дня
Когда вы выспитесь (это необходимо сделать обязательно: мозг усваивает всю полученную информацию именно во время сна) и придёте на семинар, начнётся его вторая часть:
- Вводный доклад по асинхронным моделям APM и EAP в CLR/BCL. Кто сказал, что они устарели? Все новое — хорошо забытое старое, а значит старое нельзя забывать: к нему спираль развития еще не раз вернется;
- Функциональный подход к разработке асинхронного кода. Функциональщина — она не только в F#. Мы будем разбираться как так писать код, чтобы его можно было легко распараллелить и чтобы это влекло за собой наименьшее количество как блокировок, так и аллокаций;
- Опять же, чтобы сбавить жар в наших головах мы отдохнём за обедом. Пообщаемся, сменим контекст.
- После обеда мы пойдём полировать пройденные знания. Это будут: PLINQ, async/await, механизмы их работы.