В чем преимущество микропотока Python без стека по сравнению с сопрограммой Lua в реализации конечного автомата для игры? - PullRequest
4 голосов
/ 31 октября 2010

Есть ли какие-либо преимущества в имплантации Python без стеков, чем у сопрограммы Lua? В чем их разница?

1 Ответ

9 голосов
/ 04 ноября 2010

Python без стеков и тасклеты (я не занимался программированием с Python без стеков, но я прочитал некоторые подробности о том, как он реализован):

Плюсы:

  1. Легкий вес в большинстве случаев.
  2. Имеет планировщик для управления тем, какой тасклет получит возобновление после следующего текущего.
  3. Поддержка упреждающего планирования. (т.е. запустить для инструкций X)
  4. Каналы для связи между тасклетами.

Минусы:

  1. Иногда требуется С-стек при сдаче из тасклета. (т. е. при выходе из некоторых обратных вызовов C)

Lua 5.1 с простыми сопрограммами:

Плюсы:

  1. Lightweight.
  2. Функции resume () / yield () позволяют использовать модель связи между потребителем и производителем.

Минусы:

  1. Нет встроенного планировщика. Вы должны управлять возобновлением и выдачей сопрограмм.
  2. Невозможно получить из функции C, метаметода или итератора. (Lua 5.2 снимет большинство этих ограничений, LuaJIT 1.1 обеспечивает легкое переключение c-стека для получения дохода из любого места)
  3. Нет встроенной поддержки Preemptive Scheduling. (пришлось бы использовать отладочные хуки)

Lua 5.1 с ConcurrentLua :

Плюсы:

  1. Lightweight.
  2. Планировщик с кооперативным переключением контекста.
  3. Имеет Erlang стиль обмена сообщениями между задачами.
  4. Поддержка прозрачной распределенной передачи сообщений между узлами.

Минусы:

  1. Невозможно получить из функции C, метаметода или итератора. (опять же, большинство этих ограничений распространяются на Lua 5.2 и LuaJIT)
  2. Нет встроенной поддержки Preemptive Scheduling. (пришлось бы использовать отладочные хуки)

LuaJIT 2.0 Beta с ConcurrentLua :

Плюсы:

  1. Lightweight.
  2. Планировщик с кооперативным переключением контекста.
  3. Имеет стиль обмена сообщениями между задачами в стиле Erlang.
  4. Поддержка прозрачной распределенной передачи сообщений между узлами.
  5. Очень быстрая поддержка JIT делает Lua намного быстрее, чем Python

Минусы:

  1. Возможно, сейчас не сможет выйти из функции C. Это может быть поддержано в будущих выпусках.
  2. Нет встроенной поддержки Preemptive Scheduling. (пришлось бы использовать отладочные хуки)
...