LINUX.ORG.RU

История изменений

Исправление dissident, (текущая версия) :

теперь вопрос - кто переключает контексты, то есть дает возможность каждой сущности занять процессор и работать.

Шедулер для данного трэда. Т.е. просто цикл:

for each coroutine
   do it until yield or dead
   go to next coroutine

Либо другой тип шедулера.

Это и будут fiber. А корутины если самостоятельно нужно запускать resume после каждого yield.

Опять же если я правильно понял вот это: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf

если шедулер по таймеру - это вытесняющая многозадачность. если переключение по явному(или неявному) вызову yield из самого кода - это кооперативная. как можно неявно вызвать yield?

Не «неявно вызвать yield», а «явно вызвать resume» (см. пример Lua выше) или «неявно вызвать resume» (см пример Unity выше).

Исходная версия dissident, :

теперь вопрос - кто переключает контексты, то есть дает возможность каждой сущности занять процессор и работать.

Шедулер для данного трэда. Т.е. просто цикл:

for each coroutine
   do it until done
   go to next coroutine

Либо другой тип шедулера.

Это и будут fiber. А корутины если самостоятельно нужно запускать resume после каждого yield.

Опять же если я правильно понял вот это: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf

если шедулер по таймеру - это вытесняющая многозадачность. если переключение по явному(или неявному) вызову yield из самого кода - это кооперативная. как можно неявно вызвать yield?

Не «неявно вызвать yield», а «явно вызвать resume» (см. пример Lua выше) или «неявно вызвать resume» (см пример Unity выше).