В чем разница между асинхронностью, конкурентностью, многопоточностью, многопроцессностью, парралельностью, параллелизмом, корутинами и горутинами?
Я знаю разницу между асинхронностью и многопоточностью, многопроцессностью. Не особо понимаю разницу многопоточностью и многопроцессностью (потоками и процессами)
Потом услышал другие понятия и сошел с ума.
Парралельность и параллелизм это скорее всего одно и тоже.
Я также услышал слово "корутина" из Java/Kotlin. А также горутина из Go.
И в чем между всем этим разница? Объясните мне на пальцах, пожалуйста.
Еще бы было желательно с примерами из разных или хотя-бы одного языков/языка
Ответы (1 шт):
Многопроцессорность - когда у компьютера несколько процессоров.
Многоядерность - когда у процессора несколько ядер (физических и виртуальных)
Параллельность (параллелизм) - когда задачи выполняются в одно время (физически на разных ядрах)
Конкурентность - когда задачи работают с общими ресурсами.
Асинхронность - когда несколько задач выполняются одновременно (не обязательно параллельно. Могут выполняться последовательно, но короткими промежутками поочередно)
Корутина - механизм (паттерн) позволяющий асинхронно выполнять задачи в программировании
Реализации корутин:
- C#: Task/async/await
- Go: горутина
- Unity: Coroutine
Многопоточность - когда задачи выполняются в разных потоках (threads). Они выполняются асинхронно, т.к. там постоянное переключение между потоками (ядер меньше чем потоков).
По сути это корутина на уровне операционной системы.