C/C++

"Фибер, поток, корутина" в чем разница между ними?

Сопрограмма (англ. coroutine), именуемая неучами, не знающими русской терминологии, корутиной - это синхронный код, третья разновидность подпрограммы (наряду с процедурой и функцией): в отличие от функции, сопрограмма не завершает свою работу при возврате значения, а лишь приостанавливается с сохранением своего состояния и может быть возобновлена в точке остановки.

Да, сопрограммы используют для имитации асинхронности, но сами они асинхронными они ни с какого боку не являются.

Поток (англ. thread) - отдельный блок кода, выполняемый асинхронно или параллельно. Например, потоком является программа, запускаемая в операционной системе. С другой стороны сама программа может запускать внутри себя потоки - либо используя механизмы операционной системы (чаще всего это и называют "потоками"), либо реализуя внутри себя кооперативную многогозадачность ("лёгкие / легковесные / зелёные" потоки, green threads).

Файбер (англ. fiber) - механизм реализации асинхронности в рамках легковесных потоков. В отличие от сопрограммы, которая может быть лишь возобновлена после того, как приостановила свою работу, файбер предоставляет более гибкие механизмы управления запуском / возобновлением / прекращением работы .
Николай Наумцев
Николай Наумцев
54 614
Лучший ответ
Поток — составная часть процесса, который выполняется в операционной системе. Принцип похож: несколько потоков останавливаются и возобновляются, ждут друг друга, общаются. Но есть отличия.

Потоками управляет операционная система. Переключением корутин — разработчик с помощью кода.
Переключение потоков сложно контролировать. Корутины контролируются более гибко.
Потоки отнимают много ресурсов процессора — ему постоянно приходится переключаться между ними. Корутины не требуют переключения контекста, поэтому код потребляет мало ресурсов.
Потоки выполняются на аппаратном или системном уровне. Корутины — более высокоуровневое решение. Это значит, что они дальше от системы и аппаратных ресурсов, зато ближе к человеческим понятиям.
Потоки ускоряют выполнение сложной задачи, но отнимают много ресурсов. Корутины не повышают скорость, но помогают оптимизировать нагрузку.
Корутины выполняются в рамках одного потока или пула потоков.

Skillfactory.
Про фибер русскоязычных статей не находил.
Сергей Карпов
Сергей Карпов
8 924