All streams
Search
Write a publication
Pull to refresh

Comments 8

Если углубиться в теорию, то выяснится что существует несколько разновидностей продолжений. Наиболее распространённая из них - неограниченные продолжения, представляющие состояние программы в определённый момент. Вызов такого продолжения не похож на вызов функции, поскольку он соответствует переходу в сохраненное состояние программы и не возвращает никакого значения. Такое продолжение обычно нельзя вызвать несколько раз. 

Какой смысл в продолжении, которое нельзя вызывать несколько раз, и где реализовано такое чудо?

Смысл в том, чтобы можно было перейти из одной функции в другую, например из планировщика сопрограмм в корутину, запланированную к выполнению. В качестве примера реализации можно привести язык Си, где есть функция setjmp для сохранения состояния выполнения программы и longjmp для перехода к сохраненному состоянию. Неограниченное продолжение пришло из языка Scheme, где реализовывалось при помощи функции call/cc. В качестве второго примера можно назвать библиотеку Boost Context, где есть функция callcc, представляющая собой аналог call/cc из Scheme.

Я спрашивал про это:

которое нельзя вызывать несколько раз

В Scheme продолжение можно вызывать сколько угодно.

Select упомянут в тексте статьи, но в примерах программ его нет. Есть только иллюстрация использования неблокирующего режима работы файлового дескриптора в корутине. В будущем планирую отдельную статью в которой будет рассмотрено использование epoll с сопрограммами на примере простого tcp сервера.

"Протопоток" - это ещё одно название для 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 рабочими примерами

Sign up to leave a comment.

Articles