Сопрограмма (англ. coroutine), именуемая неучами, не знающими русской терминологии, корутиной - это синхронный код, третья разновидность подпрограммы (наряду с процедурой и функцией): в отличие от функции, сопрограмма не завершает свою работу при возврате значения, а лишь приостанавливается с сохранением своего состояния и может быть возобновлена в точке остановки.
Да, сопрограммы используют для имитации асинхронности, но сами они асинхронными они ни с какого боку не являются.
Поток (англ. thread) - отдельный блок кода, выполняемый асинхронно или параллельно. Например, потоком является программа, запускаемая в операционной системе. С другой стороны сама программа может запускать внутри себя потоки - либо используя механизмы операционной системы (чаще всего это и называют "потоками"), либо реализуя внутри себя кооперативную многогозадачность ("лёгкие / легковесные / зелёные" потоки, green threads).
Файбер (англ. fiber) - механизм реализации асинхронности в рамках легковесных потоков. В отличие от сопрограммы, которая может быть лишь возобновлена после того, как приостановила свою работу, файбер предоставляет более гибкие механизмы управления запуском / возобновлением / прекращением работы .
C/C++
"Фибер, поток, корутина" в чем разница между ними?
Поток — составная часть процесса, который выполняется в операционной системе. Принцип похож: несколько потоков останавливаются и возобновляются, ждут друг друга, общаются. Но есть отличия.
Потоками управляет операционная система. Переключением корутин — разработчик с помощью кода.
Переключение потоков сложно контролировать. Корутины контролируются более гибко.
Потоки отнимают много ресурсов процессора — ему постоянно приходится переключаться между ними. Корутины не требуют переключения контекста, поэтому код потребляет мало ресурсов.
Потоки выполняются на аппаратном или системном уровне. Корутины — более высокоуровневое решение. Это значит, что они дальше от системы и аппаратных ресурсов, зато ближе к человеческим понятиям.
Потоки ускоряют выполнение сложной задачи, но отнимают много ресурсов. Корутины не повышают скорость, но помогают оптимизировать нагрузку.
Корутины выполняются в рамках одного потока или пула потоков.
Skillfactory.
Про фибер русскоязычных статей не находил.
Потоками управляет операционная система. Переключением корутин — разработчик с помощью кода.
Переключение потоков сложно контролировать. Корутины контролируются более гибко.
Потоки отнимают много ресурсов процессора — ему постоянно приходится переключаться между ними. Корутины не требуют переключения контекста, поэтому код потребляет мало ресурсов.
Потоки выполняются на аппаратном или системном уровне. Корутины — более высокоуровневое решение. Это значит, что они дальше от системы и аппаратных ресурсов, зато ближе к человеческим понятиям.
Потоки ускоряют выполнение сложной задачи, но отнимают много ресурсов. Корутины не повышают скорость, но помогают оптимизировать нагрузку.
Корутины выполняются в рамках одного потока или пула потоков.
Skillfactory.
Про фибер русскоязычных статей не находил.
Похожие вопросы
- Понятие " * " в c++
- Код для "Угадай число"
- Здраствуйте, я не понимаю что означает "int" и "main" можете обьяснить)
- Как узнать, что дочерние потоки процесса запущены на разных процессорах или ядрах процессора?
- C++: "С-Строка" и ошибка
- Задача "Числа Фибоначчи"
- Нужна помощь с написанием кода на языке "С"
- Помогите написать программу по теме "Строки" на языке C.
- Что такое "СИ"?
- (Ошибка) аргумент типа "const char *" несовместим с параметром типа "char *"