Асинхронность и многопоточность в C#. Как избежать ошибок на собеседовании

YOUTUBE · 22.11.2025 06:55

Ключевые темы и таймкоды

Вебинар по синхронности и многопоточности

0:00
  • Вебинар посвящен синхронности и многопоточности в C# и как избежать ошибок на собеседованиях.
  • Преподаватель Родион Мостовой представляет себя и школу программирования OTS.
  • Он также рассказывает о своем опыте работы в коммерческой разработке и проектировании программного обеспечения.

Цели занятия

9:16
  • После занятия участники смогут правильно использовать Task и не использовать Thread там, где это не нужно.
  • Они также смогут разбираться в основных терминах многопоточного синхронного программирования и отвечать на каверзные вопросы о синхронности и многопоточности на собеседованиях.

Термины и определения

11:26
  • Многопоточность - форма конкурентности, использующая несколько программных потоков выполнения.
  • Синхронное программирование - разновидность конкурентности, использующая промесы или обратные вызовы для предотвращения создания лишних потоков.
  • Задачи выполняются одновременно, но с минимизацией использования потоков.

Многопоточность и синхронность

14:03
  • Многопоточность используется для тяжелых вычислений, таких как рендеринг, конвертация аудио и видео, а также для работы с искусственным интеллектом.
  • Синхронность используется для операций ввода-вывода, таких как работа с сетью, субд, файловой системой и жестким диском.
  • Честная синхронность работает без создания новых потоков, делегируя работу другим устройствам, таким как сетевая карта или жесткий диск.

Таск и Тред

20:05
  • Класс Тред создает потоки по старинке, менее эффективно, чем таск.
  • Таск предоставляет доступ к созданию высокоуровневых потоков и позволяет дожидаться окончания выполнения через ключевое слово "и-вэй".
  • Таск почти всегда создается через тредпул, что позволяет переиспользовать созданные потоки и работать на уже созданных.
  • Тредпул может выполнять несколько делегатов за квант времени, что делает его более эффективным подходом.

Когда использовать класс Thread

27:26
  • Вопрос о том, когда использовать класс Thread, вызывает интерес у разработчиков.
  • Ответ: для длительных задач, где требуется ручное управление потоком, например, для изменения параметров потока или размера стека.

Проблемы с использованием Thread

36:01
  • Thread не подходит для методов, ожидающих завершения операции, и не позволяет определить, когда выполнение завершится.
  • Вызывающий код не может перехватить возникающие исключения.

Когда использовать синхронный код

39:15
  • Везде, где доступно, следует использовать сигнатуру async task вместо async void.
  • Async void используется в некоторых случаях, например, в обработчиках событий в Windows Forms и ASP.NET.

Синхронный рейтинг

41:23
  • Синхронный рейтинг позволяет вызывать асинхронные методы так, как будто они синхронные.
  • Это может привести к блокировке потока и снижению производительности веб-приложения.
  • В некоторых случаях синхронный рейтинг может привести к дедлоку.

Отличие таск залт от таск гет

46:35
  • Таск залт оборачивает исключение в специальное исключение, что облегчает отладку и обработку исключений.
  • Таск гет вызывает исключение напрямую, что может быть удобнее для отладки и обработки исключений.
  • Правильный подход к работе с синхронностью - использование эйсинг вейт.

Локи и интернирование строк

52:45
  • Локи от строки может создать впечатление, что создается новый объект, но на самом деле это не так.
  • Интернирование строк - это процесс сохранения одинаковых строк в одном месте, что может экономить память.
  • Однако, если локи по строке, это может вызвать дедлок, когда кто-то другой также залочится по той же строке.

Таски и их использование

55:55
  • Таски - это оптимизированная версия таски, которая может возвращать ответ сразу, без выполнения синхронного вызова.
  • Таски могут создавать новые потоки, если дедпул еще не разогрет или если у него нет свободных потоков.

Сетевая карта и возврат результатов

1:01:20
  • Операционная система выполняет таску, которая делает сетевой вызов, и затем сообщает об этом приложению через специальный сервисный поток.

Вопросы и ответы

1:03:58
  • Таска может выполняться на вызывающем потоке, если она не является синхронной.
  • Если таска синхронная, она может выполняться на вызывающем потоке, если внутри таски нет синхронных методов.
  • Если александр вытаскивает из очереди, он может использовать таски для оптимизации.

Синхронность и многопоточность

1:06:09
  • В видео обсуждаются ошибки, связанные с синхронностью и многопоточностью, включая использование монитора и ошибки в синтаксисе.
  • Упоминается, что использование монитора может привести к созданию нового объекта и блокировке потока.
  • Также обсуждаются экзотические кейсы, такие как использование "э-вейта" внутри монитора и риск возникновения эксцепшена в мониторе экзит.

Курс и команда

1:10:53
  • Курс проводится в формате вебинаров, записи занятий сохраняются в личном кабинете.
  • Домашние задания позволяют применять полученные знания на практике.
  • Преподаватели предоставляют развернутый фидбек по домашним заданиям.
  • Курс обновляется в зависимости от актуальных запросов в сфере ИТ-технологий.

Проектные работы

1:16:20
  • В курсе предусмотрена командная работа над проектами, что позволяет получить опыт и отразить его в резюме.
  • Преподаватели курса - продвинутые специалисты, в основном элиты и сеньоры.
  • В курсе есть темы, посвященные синхронности, многопоточности и паттернам проектирования.

Требования для соискателей уровня мидл

1:20:11
  • Требования для соискателей уровня мидл включают знание шарпа, баз данных, антифреймов, клинков и других технологий.
  • Если интересует бэк-энд разработка, можно рассмотреть дополнительный курс по кор.

Синхронное и многопоточное программирование

1:21:53
  • Синхронное программирование позволяет выполнять несколько действий одновременно, многопоточность - с использованием программных потоков.
  • Таск - обертка на тред, но может и не задействовать потоки.
  • В большинстве случаев возможностей таск достаточно для реализации синхронности и многопоточности.

Полезные материалы

1:25:34
  • Книга Стивена Клири "Конкурентность шарп" и книга Рихтера "Селар вай си шарп" (пятая часть, посвященная многопоточности).
  • База знаний на GitHub с курсами, видео докладами, статьями и книгами по многопоточности и синхронности.

Курс "Сша девелопер-профессионал"

1:27:07
  • Обучение стартует 30 января.
  • Обратная связь и вопросы приветствуются.