Python без стеков и тасклеты (я не занимался программированием с Python без стеков, но я прочитал некоторые подробности о том, как он реализован):
Плюсы:
- Легкий вес в большинстве случаев.
- Имеет планировщик для управления тем, какой тасклет получит возобновление после следующего текущего.
- Поддержка упреждающего планирования. (т.е. запустить для инструкций X)
- Каналы для связи между тасклетами.
Минусы:
- Иногда требуется С-стек при сдаче из тасклета. (т. е. при выходе из некоторых обратных вызовов C)
Lua 5.1 с простыми сопрограммами:
Плюсы:
- Lightweight.
- Функции resume () / yield () позволяют использовать модель связи между потребителем и производителем.
Минусы:
- Нет встроенного планировщика. Вы должны управлять возобновлением и выдачей сопрограмм.
- Невозможно получить из функции C, метаметода или итератора. (Lua 5.2 снимет большинство этих ограничений, LuaJIT 1.1 обеспечивает легкое переключение c-стека для получения дохода из любого места)
- Нет встроенной поддержки Preemptive Scheduling. (пришлось бы использовать отладочные хуки)
Lua 5.1 с ConcurrentLua :
Плюсы:
- Lightweight.
- Планировщик с кооперативным переключением контекста.
- Имеет Erlang стиль обмена сообщениями между задачами.
- Поддержка прозрачной распределенной передачи сообщений между узлами.
Минусы:
- Невозможно получить из функции C, метаметода или итератора. (опять же, большинство этих ограничений распространяются на Lua 5.2 и LuaJIT)
- Нет встроенной поддержки Preemptive Scheduling. (пришлось бы использовать отладочные хуки)
LuaJIT 2.0 Beta с ConcurrentLua :
Плюсы:
- Lightweight.
- Планировщик с кооперативным переключением контекста.
- Имеет стиль обмена сообщениями между задачами в стиле Erlang.
- Поддержка прозрачной распределенной передачи сообщений между узлами.
- Очень быстрая поддержка JIT делает Lua намного быстрее, чем Python
Минусы:
- Возможно, сейчас не сможет выйти из функции C. Это может быть поддержано в будущих выпусках.
- Нет встроенной поддержки Preemptive Scheduling. (пришлось бы использовать отладочные хуки)