Concurrency vs Parallelism - в чём разница?
Это очень популярный вопрос на собеседованиях, и эти термины часто путают. Давайте разберемся, кто есть кто.
Конкурентность (Concurrency) — когда у нас одновременно в работе несколько задач, но в каждый момент времени мы не обязательно выполняем их все одновременно. Возможно, мы вообще можем одновременно работать лишь над одной задачей, переключаясь между ними в определенные моменты времени. Если говорить более строго, это когда две или более задачи могут начинаться, выполняться и завершаться в перекрывающиеся временные промежутки, но не обязательно одновременно.
Параллельность (Parallelism) — когда задачи действительно выполняются одновременно на разных процессорах или ядрах.
Важно отметить, что эти термины не взаимоисключающие. То есть, конкуретный код может выполняться параллельно.
Конкурентное выполнение задач эффективно в ситуациях, когда задачи часто чего-то ждут (например, ввода-вывода), позволяя одной задаче продвигаться, пока другая ждёт.
Параллельное выполнение же лучше подходит для вычислительно интенсивных задач, которые можно разделить на подзадачи, выполняемые одновременно, для ускорения общего времени выполнения.
————
Интересные материалы на эту тему:
- Deadlock Empire - очень крутой интерактивный туториал на тему конкуретности. О нём я уже писал чуть более подробный пост. На мой взгляд, пройти эту штуку должен каждый Go-разработчик (и не только) - будете знать всё о дедлоках, проблемах конкуретного выполнения и как с ними бороться (спойлер: ни как, остаётся только молиться 🌚)
- Summary of Concurrency Is Not Parallellism, a talk by Rob Pike - очень крутая статья Рахима Давлеткалиева
- Concurrency in Go - неплохая статья на эту тему. Здесь также затрагивают и сравнение данных терминов.
- Книга Concurrency in Go, автор Katherine Cox-buday
Интересные и полезные дополнения в комментариях приветствуются
#guide
Это очень популярный вопрос на собеседованиях, и эти термины часто путают. Давайте разберемся, кто есть кто.
“Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.” — Rob Pike
Конкурентность (Concurrency) — когда у нас одновременно в работе несколько задач, но в каждый момент времени мы не обязательно выполняем их все одновременно. Возможно, мы вообще можем одновременно работать лишь над одной задачей, переключаясь между ними в определенные моменты времени. Если говорить более строго, это когда две или более задачи могут начинаться, выполняться и завершаться в перекрывающиеся временные промежутки, но не обязательно одновременно.
Параллельность (Parallelism) — когда задачи действительно выполняются одновременно на разных процессорах или ядрах.
Важно отметить, что эти термины не взаимоисключающие. То есть, конкуретный код может выполняться параллельно.
Конкурентное выполнение задач эффективно в ситуациях, когда задачи часто чего-то ждут (например, ввода-вывода), позволяя одной задаче продвигаться, пока другая ждёт.
Параллельное выполнение же лучше подходит для вычислительно интенсивных задач, которые можно разделить на подзадачи, выполняемые одновременно, для ускорения общего времени выполнения.
————
Интересные материалы на эту тему:
- Deadlock Empire - очень крутой интерактивный туториал на тему конкуретности. О нём я уже писал чуть более подробный пост. На мой взгляд, пройти эту штуку должен каждый Go-разработчик (и не только) - будете знать всё о дедлоках, проблемах конкуретного выполнения и как с ними бороться (спойлер: ни как, остаётся только молиться 🌚)
- Summary of Concurrency Is Not Parallellism, a talk by Rob Pike - очень крутая статья Рахима Давлеткалиева
- Concurrency in Go - неплохая статья на эту тему. Здесь также затрагивают и сравнение данных терминов.
- Книга Concurrency in Go, автор Katherine Cox-buday
Интересные и полезные дополнения в комментариях приветствуются
#guide