DevPrep

Все темы › Многопоточность и асинхронное программирование

Асинхронность vs многопоточность. Чем отличаются?

Middle PRO

Суть

Это две независимые характеристики.

Асинхронность — о порядке исполнения. Функция не возвращает результат сразу, а отдаёт управление вызывающему коду с обещанием сообщить результат позже (колбэк, Publisher, await). Ничего не говорится о том, где и сколькими потоками этот результат считается. Асинхронный код прекрасно живёт на одном потоке: run loop главного потока по очереди обрабатывает тачи, таймеры и сетевые колбэки; JavaScript в браузере — тот же принцип.

Многопоточность — о физическом исполнении. У процесса несколько потоков, каждый со своим стеком, планируемых ядром независимо; на многоядерном CPU они выполняются по-настоящему параллельно. Потоки делят адресное пространство процесса, поэтому и возникают гонки данных.

Полезная пара терминов: concurrency — структура программы, позволяющая задачам перекрываться во времени; parallelism — одновременное исполнение на нескольких ядрах. Асинхронность даёт concurrency; многопоточность — способ получить parallelism.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store