Этап 2 из 15 · ≈ 8 ч

Конкурентность

Основа с Junior

Гонки данных, мьютексы и семафоры, взаимные блокировки, атомарные операции и пулы потоков.

Что важно знать

  • Гонка данных: два потока читают и пишут одно значение без синхронизации — результат зависит от порядка выполнения.
  • Мьютекс — один поток в критической секции; семафор — не больше N.
  • Взаимная блокировка: потоки ждут ресурсы друг друга; лечится единым порядком захвата и таймаутами.
  • Атомарные операции (CAS) — без блокировок для простых случаев.
  • Видимость: без синхронизации поток может не увидеть запись другого потока.
  • Пул потоков переиспользует потоки; размер зависит от того, ждут ли задачи ввода-вывода.

Критерии освоения

Junior ≈ 8 ч

  • Объясняет состояние гонки на примере счётчика и исправляет его блокировкой
  • Объясняет взаимную блокировку и как её избежать порядком захвата

Практика. Написать программу с гонкой на общем счётчике, показать неверный результат и исправить двумя способами.

Middle ≈ 8 ч

  • Выбирает между блокировкой, атомарной операцией и неизменяемыми данными
  • Подбирает размер пула потоков для задач с вычислениями и с ожиданием ввода-вывода

Практика. Реализовать потокобезопасный кэш с ограничением размера и нагрузочный тест на 16 потоков.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем мьютекс отличается от семафора?Junior

Мьютекс — замок на одного: в критической секции один поток, отпустить может только владелец. Семафор — счётчик разрешений: одновременно до N потоков.

Полный разбор
Чем асинхронность отличается от многопоточности?Middle

Многопоточность — несколько потоков ОС, их переключает ядро. Асинхронность — одна (или немного) нить выполнения переключается между задачами сама, в точках ожидания (await).

Полный разбор
Что такое состояние гонки?Junior

Гонка — результат зависит от того, в каком порядке потоки выполнили свои шаги. Классика: count++ — это три шага (прочитать, прибавить, записать), и два потока теряют обновления.

Полный разбор
Что такое атомарные операции и CAS?Middle

CAS (compare-and-swap) — инструкция процессора «если в ячейке ещё A, запиши B» за один неделимый шаг. На ней строят атомарные счётчики и структуры без блокировок.

Полный разбор
Что такое взаимная блокировка и как её избежать?Middle

Взаимная блокировка — потоки ждут друг друга по кругу: первый держит A и ждёт B, второй держит B и ждёт A. Никто не продвинется.

Полный разбор
Почему один поток может не увидеть изменение, сделанное другим?Middle

Компилятор, JIT и процессор переупорядочивают и кэшируют операции с памятью — для одного потока результат тот же, для другого нет. Без синхронизации запись может стать видна поздно или в другом порядке.

Полный разбор
Чем процесс отличается от потока?Junior

Процесс — запущенная программа со своим адресным пространством и ресурсами. Поток — ход выполнения внутри процесса; потоки делят память процесса.

Полный разбор
Чем отличаются threading, multiprocessing и asyncio?Junior

Потоки и asyncio — для ожидания ввода-вывода, процессы — для вычислений на нескольких ядрах.

Полный разбор
Зачем нужен пул потоков и как выбрать его размер?Middle

Пул держит заранее созданные потоки и очередь задач: не платим за создание потока на каждую задачу и ограничиваем параллелизм.

Полный разбор
Как реализовать схему производитель — потребитель?Middle

Производители кладут задачи в ограниченную блокирующую очередь, потребители забирают. Полная очередь останавливает производителя, пустая — потребителя.

Полный разбор

← Вся карта «Backend-разработчик»

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования