lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

"Gregg Reynolds" <> writes:

> On 8/13/07, David Kastrup <> wrote:
>> This would hold at best on single processors: on multiple processors,
>> several threads can run simultaneously unpreempted.  However,
>> coroutines, being strictly synchronized, can have something that
>> threads in general don't: they can pass values.  Yielding in a Lua
>> thread will both pass and accept a value to and from the controlling
>> Lua thread.  This is obviously only possible when the caller is
>> suspended until the called thread yields.  Apart from the switching of
>> the stacks, this is completely identical to function calls.
> Another thing:  the surface syntax of Lua makes the relation of
> coroutines appear to be asymmetric.  But I think coroutines are
> symmetric;  yield and resume are synonyms meaning "invoke
> continuation".

Yes, this has occured to me as well: the language is not expressing
this symmetry.  However, there are some slight differences:

Yielding is always done to the thread that resumed, while resuming can
be done to any thread.  This is similar to function calls: they always
return to the caller, but calling can be done to any function.

So we are actually again in a caller/callee relationship.  It is just
weaker than in function calling because the callee does not need to be
at function begin/exit.

David Kastrup