Стоит ли углубленно изучать многопоточность, асинхронное и паралельное программирование?
Стоит ли изучать многопоточность, асинхронное и паралельное программирование в .Net углубленно? Заметил что для углубленного изучение этих тем на русском есть лишь доки Майкрософт, все остальные источники дают базовые знания. Источники такие как книги(Шелдт С# 4.0, CLR via C#, "Конкурентность" Клири Стивен) и сайты (metanit, professorweb и еще парочку).
Тут есть два смысла. Первое - это "проскочить" на собеседовании. Если ты будешь его проходить
на дот-нетчика то полюбому что-нибудь спросят. Может попросят написать какую-то задачу с двумя
потоками где состояние потоков как-то разделяется или события от одного идут к другому.
Из канонических задач на конкуренцию я припоминаю "спящий парикмахер" или официант. Не помню смысл - погугли сам. И задача об "обедающих философах" которая просто моделирует дедлок. И в этой
же задаче дается разьяснение как дедлок убрать.
Из параллелизма есть задача параллельного умножения двух больших матриц. Очень популярная
и многократно обсужденная почти во всех It-ресурсах.
И второй смысл - это просто знать способы распараллеливания медленно работающих задач.
Современные фреймворки - тяготеют к тому чтобы разработчик не встречался с задачей конкуренции.
Яркий пример - акторные фреймворки (Akka, Storm). А в задачах биг-даты - практически все
сводятся к map-reduce и если ты хорошо сделал partitioning для своих таблиц или файлов то тебе вообще
ничего делать не надо. Фреймворк сам позаботится. Добавляй только ему ресурсы (процессоры или ноды).
И любые задачи массовой обработки файлов и сетевых событий - автоматом поднимают проблему мультиптоточки.
Тоесть почитать на эту тему - надо. Но упарываться совсем я-бы не стал. Более того, синтетические
задачи которые приводят в учебниках или форумах часто поражают своей убогостью и ненужностью
постановки. Там просто, споря о постановке можно половину проблем выкинуть или переформатировать
так что и мультипоточка будет не нужна.
Тоесть если будешь решать практические задачи - бери настоящие а не высосанные из пальца.
Что ты понимаешь под "углубленным изучением"? К примеру можно ограничиться чтением " Параллельного программирования С# и net core" Шакти Танвара. В тексте книги полно ошибок, но общее представление о тредах, тасках, мьютексах и семафорах, а так же о конкурентных коллекциях он даёт.
PS// Menanit и ProfessorWeb такие себе источники. Первый чрезвычайно попсовый и информация там местами устарела, а последний уличён в майнинге на юзерских машинах.