开发者

What's the advantage of stack-less Python's microthread than Lua's coroutine in state machine implementation for game?

Any advantage on stack-less python implen开发者_JAVA百科tation than Lua's coroutine? What's the difference of them?


stackless python and tasklets (I haven't done any programming with stackless python, but I have read some of the details about how it is implemented):

Pros:

  1. Lightweight most of the time.
  2. Has scheduler to manage which tasklet get resume next after the current one yields.
  3. Support for Preemptive Scheduling. (i.e. run for X instructions)
  4. Channels for communication between tasklets.

Cons:

  1. Sometimes need C-stack when yielding from a tasklet. (i.e. when yielding from some C callbacks)

Lua 5.1 with plain coroutines:

Pros:

  1. Lightweight.
  2. resume()/yield() functions allow consumer/producer model of communication.

Cons:

  1. No built-in scheduler. You have to manage resuming & yielding coroutines.
  2. Can't yield from a C function, a metamethod, or an iterator. (Lua 5.2 will remove most of these restrictions, LuaJIT 1.1 provides lightweight c-stack switching to yield from anywhere)
  3. No built-in Preemptive Scheduling support. (would have to use debug hooks)

Lua 5.1 with ConcurrentLua:

Pros:

  1. Lightweight.
  2. Scheduler with cooperative context switching.
  3. Has Erlang style of message passing communication between tasks.
  4. Support for transparent distributed message passing between nodes.

Cons:

  1. Can't yield from a C function, a metamethod, or an iterator. (again most of these restrictions go-away with Lua 5.2 and LuaJIT)
  2. No built-in Preemptive Scheduling support. (would have to use debug hooks)

LuaJIT 2.0 Beta with ConcurrentLua:

Pros:

  1. Lightweight.
  2. Scheduler with cooperative context switching.
  3. Has Erlang style of message passing communication between tasks.
  4. Support for transparent distributed message passing between nodes.
  5. Very fast JIT support makes Lua much faster then Python

Cons:

  1. Might not be able to yield from a C function right now. This might be supported in future releases.
  2. No built-in Preemptive Scheduling support. (would have to use debug hooks)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜