Pull to refresh
0

CLRium #6: Concurrency & Parallelism. Два дня: от процессора до async/await

Reading time3 min
Views5.9K




Как вы уже заметили, формат семинара эволюционировал и принял новую форму: каждый последующий семинар теперь посвящается целиком и полностью какой-либо теме. Пятый был посвящен теме Garbage Collector и за 10 часов раскрыл всё, что только возможно, оставив за скобками совсем уж частные вопросы. А его кульминацией был доклад про практическое применение (вопрос, который интересует каждого — "зачем всё это знать??")


Второй вопрос, который, как мне кажется, хочется знать всем, но на это, как правило, нет времени — это вопрос работы в многопоточном коде и вопрос планирования и поддержки его архитектуры. Вопросы эти — достаточно сложные, пугающие, а зачастую — вообще отталкивающие. И ровно поэтому дальше простейших конструкций синхронизации обычный разработчик не уходит. А ведь вокруг столько всего интересного :)


Не так давно я понял одну казалось бы простую истину: чтобы понимать, как работают любые абстракции верхнего уровня, необходимо понимать, как работают абстракции нижнего уровня. Другими словами, чтобы понимать, как работать с многопоточным кодом на уровне async/await, надо знать примитивы синхронизации и прочие основы работы многопоточного кода в .NET как минимум. А что еще лучше — совсем немного из уровня операционной системы. После чего большинство абстракций верхнего уровня станут понятны автоматически.


На новом семинаре, который на этот раз касается не только платформы .NET, как это было ранее, но охватывает по сути любые платформы (ведь многопоточный код работает на базе абстракций нижнего уровня) мы раскроем эту тему максимально подробно:


План семинара


Основы


Для начала мы рассмотрим базу: всё, что уходит корнями в операционную систему и процессор. Ведь любые механики верхнего уровня работают на основе правил нижнего. Сюда будут входить основы процессорной архитектуры, примитивы синхронизации и API операционных систем Windows и Linux. Вы знали, что одних только процессов бывает несколько видов?


BCL, Schedulers, Thread Locals, STA/MTA...


Рассмотрев эти абстракции и рассмотрев правила работы с ними, мы перекинемся на базовые абстракции самой платформы: BCL, Thread Locals, пулы потоков и прочие основы. Эти абстракции есть везде, но примеры будут для платформы .NET. Мы увидим взаимосвязь с операционной системой, их производительность, а также применимость в различных ситуациях. Мы, наконец, поймём многие вопросы, до которых не доходили руки: контексты синхронизации, STA/MTA, как работает Thread Locals и многое другое.


Платформенные механики


С каждой новой абстракцией плюс ввиду того что все будет рассказано рядом: за один день, вы начнете связывать все знания между собой и мы плавно переключимся на различные механизмы более высокого уровня: планировщики, background, модели разработки многопоточного кода.


Lock-free алгоритмы


вплоть до async/await. И в конце концов, мы рассмотрим более продвинутые алгоритмы работы с многопоточкой. Мы сделаем разбор пары lock-free алгоритмов чтобы каждый из вас смог их создавать самостоятельно. И после этого научимся делать требования к разработке собственных.


PLINQ / async-await


Далее, вобрав в себя знания основ, мы начнем изучать библиотки высоких уровней абстракций: от PLINQ вплоть до async/await, разбирая особенности работы с каждой. Здесь я подразумеваю, что с самими библиотеками вы примерно знакомы и мы будем углубляться в каждую из них на несколько более хардкорном уровне.


Конечно же, мы не сможем раскрыть тему Concurrency за один день: эта тема слишком обширна и многогранна. Именно по этой причине CLRium #6 будет идти два дня.


Контакты


Tags:
Hubs:
Total votes 23: ↑21 and ↓2+19
Comments0

Articles

Information

Website
clrium.ru
Registered
Founded
Employees
1 employee (me only)
Location
Россия
Representative
Stanislav Sidristij