В чем разница между асинхронностью, конкурентностью, многопоточностью, многопроцессностью, парралельностью, параллелизмом, корутинами и горутинами?

Я знаю разницу между асинхронностью и многопоточностью, многопроцессностью. Не особо понимаю разницу многопоточностью и многопроцессностью (потоками и процессами)

Потом услышал другие понятия и сошел с ума.

Парралельность и параллелизм это скорее всего одно и тоже.

Я также услышал слово "корутина" из Java/Kotlin. А также горутина из Go.

И в чем между всем этим разница? Объясните мне на пальцах, пожалуйста.

Еще бы было желательно с примерами из разных или хотя-бы одного языков/языка


Ответы (1 шт):

Автор решения: Glebka

Многопроцессорность - когда у компьютера несколько процессоров.

Многоядерность - когда у процессора несколько ядер (физических и виртуальных)


Параллельность (параллелизм) - когда задачи выполняются в одно время (физически на разных ядрах)

Конкурентность - когда задачи работают с общими ресурсами.


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

Корутина - механизм (паттерн) позволяющий асинхронно выполнять задачи в программировании

Реализации корутин:

  • C#: Task/async/await
  • Go: горутина
  • Unity: Coroutine

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

По сути это корутина на уровне операционной системы.

→ Ссылка