CLRium #6: Concurrency

от автора

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

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

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

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

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

Основы

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

BCL, Schedulers, Thread Locals, STA/MTA…

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

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

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

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

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

PLINQ / async-await

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

Конечно же, мы не сможем раскрыть тему Concurrency за один день: эта тема слишком обширна и многогранна. Плюс это будет вредить качеству и запоминаемости. Но мы рассмотрим самые разные темы и поверьте: каждый из вас узнает очень много нового.

Контакты


ссылка на оригинал статьи https://habr.com/ru/company/clrium/blog/460635/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *