[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: What's the difference between a "coroutine" and a "thread" in Lua?
- From: Adrien de Croy <adrien@...>
- Date: Mon, 13 Aug 2007 16:27:46 +1200
David Kastrup wrote:
Adrien de Croy <email@example.com> writes:
in the context of OS threads, it refers to an independent call stack
What do you mean with context?
in an OS thread, the context includes things like CPU registers etc.
a thread is a simple object. A scheduler pre-empts threads, the thread
does not pre-empt itself.
Process memory is shared and accessible to all threads of a process.
Stack variables however, belong to the thread whose stack they
re-entrable code vs yielding or being pre-empted are independent
concepts to that of a thread.
Uh what? A thread that is neither preempted nor yields is not a thread.
So the concept of pre-empting or yielding are indeed independent
concepts to the concept of a "thread". Related / linked maybe but they
are their own concepts.
where did I say that a thread that is neither pre-empted NOR yields is
not a thread? those are your words not mine. My words were
"independent concepts". That does not imply mutual exclusivity, merely
independence. Things can be independent without having to be mutually
Since a lua thread provices another call stack, and has its own
context, I think it qualifies to be called a thread.
I don't see an "own context" in any sensible meaning of the word, and
of course coroutines all have their own stack. That's the whole point
of them. The difference between coroutines and threads is that
coroutines have a single flow of control. That means that there is no
necessity for any locking in coroutines. The sequence of operations
is uniquely determined by yielding. That is no different to
subroutine calls, _except_ that yielding does not leave the call stack
of the current coroutine and reenters at the same place.
Essentially wrapping a function body into one endless loop with a
yield at the end is pretty much the same from a transfer of control
view than returning.
Actually the issue I was attempting to address was the question raised
about whether it was correct to call a lua thread a thread at all. I
believe it has the requirements to be validly called a thread.
Adrien de Croy - WinGate Proxy Server - http://www.wingate.com