Базовый CS с нуля
Время и конкурентность: свободное воспроизведение
Воспроизведение по памяти бьёт перечитывание. Для каждого промпта скажи или запиши полный ответ по памяти, прежде чем открыть образцовый ответ — именно усилие припоминания закрепляет идею. Эти промпты охватывают весь юнит, заканчивая там, куда указывали уроки: что происходит, когда конкурентные задачи делят данные.
Восстанови спину юнита по памяти — зачем существует async, разделение blocking/non-blocking, единственное правило event loop, различие concurrency vs parallelism и почему общее состояние вынуждает synchronization — не подглядывая в уроки.
- 01Зачем существует async? Используй в ответе разрыв в скорости CPU и устройства.
- 02В чём разница между blocking- и non-blocking-вызовом и для чего нужен callback?
- 03Что такое event loop и какое единственное правило определяет, когда выполняется callback?
- 04В чём разница между concurrency и parallelism и почему одноядерная машина может быть concurrent, но никогда parallel?
- 05Что такое race condition и почему counter = counter + 1 в двух thread'ах его обнажает?
- 06Что делает lock, чтобы починить race, и какова цена его использования?
Если ты смог восстановить каждый ответ по памяти, ты держишь спину юнита: async существует, потому что CPU не должен простаивать через огромный разрыв в скорости CPU и устройства; non-blocking-вызов возвращается сразу и доставляет результат позже через callback; event loop выполняет callback’и по одному за раз, только когда call stack пуст, поэтому синхронный код всегда завершается первым. Это concurrency — переплетение на одном ядре, по очереди — в отличие от parallelism, настоящей одновременности на нескольких ядрах. И как только конкурентные задачи делят состояние, порядок начинает иметь значение: race condition может потерять обновления, потому что read-add-write не атомарен, а lock восстанавливает корректность, сериализуя общую секцию ценой её parallelism.