Comments 8
Если углубиться в теорию, то выяснится что существует несколько разновидностей продолжений. Наиболее распространённая из них - неограниченные продолжения, представляющие состояние программы в определённый момент. Вызов такого продолжения не похож на вызов функции, поскольку он соответствует переходу в сохраненное состояние программы и не возвращает никакого значения. Такое продолжение обычно нельзя вызвать несколько раз.
Какой смысл в продолжении, которое нельзя вызывать несколько раз, и где реализовано такое чудо?
Смысл в том, чтобы можно было перейти из одной функции в другую, например из планировщика сопрограмм в корутину, запланированную к выполнению. В качестве примера реализации можно привести язык Си, где есть функция setjmp для сохранения состояния выполнения программы и longjmp для перехода к сохраненному состоянию. Неограниченное продолжение пришло из языка Scheme, где реализовывалось при помощи функции call/cc. В качестве второго примера можно назвать библиотеку Boost Context, где есть функция callcc, представляющая собой аналог call/cc из Scheme.
интересно, у вас используется селект, там не нужен FD_SET + timestamp?
"Протопоток" - это ещё одно название для user space thread? А как же fiber или goroutine? Я так понял единственное их отличе это то что они stackless.
"Протопоток" относится к user space thread. Но я не считаю эти пониятия тождественными так как fiber и goroutine также относятся к user space thread. Да, "протопотоки" stackless и используются, в первую очередь, в языке Си для написания программ в системах с сильно ограниченным объемом памяти типа микроконтроллеров. Что касается fiber, то тут надо уточнить. Есть библиотека Fiber для С++, входящая в Boost. Там Fiber stackful. Есть еще библиотека Fiber в Windows. Я с ней не работал, но вроде они тоже stackful, как описано здесь. Горутины не для Си/С++, но тоже stackful.
MD победил программиста на Си/С++? Раз уж блоки кода настолько отвратные хоть бы сделали ссылки на godbolt c рабочими примерами
Эволюция подходов к написанию корутин от Си до С++20. Часть 1. Функция+макросы=корутина