Опыт, полученный при программировании в Erlang, не совсем прямо ложится на кооперативную многозадачность. Там у легковесных процессов есть понятие редукций (редукция - это единица минимального вычисления), и там переключением процессов занимается планировщик задач, то есть программист не несет ответсвенность за это.
С кооперативной же многозадачностью программист берет на себя ответственность за переключения между нитями
Позвольте выказать свое "ЗА". В BEAM вообще очень сложно впихнуть что-то крупнее "функции и сообщения". Ну т.е. вся подкопотня построена так, что, даже "циклов" нет на уровне языка! Каждая итерация - не более чем вызов "чистой" функции (даже самой себя). Это ОООЧЕНЬ крутой подход, но не эквивалент lua-coroutine. В tarantool/lua вы сами себе Буратины - модете напихать тучу вложенных циклов ДО вызова coroutine.yield (см. fiber). Сами стреляете - сами страдаете. ))))