[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Speed issue?
- From: Eugen-Andrei Gavriloaie <shiretu@...>
- Date: Wed, 26 Mar 2008 06:25:15 +0200
On Mar 26, 2008, at 5:58 AM, Graham Wakefield wrote:
Does the stack size increase by itself? If I do for example (I know
this is a stupid example, but it works as an example):
On Mar 25, 2008, at 6:23 PM, Eugen-Andrei Gavriloaie wrote:
One little issue... each lua_newthread() pushes a lua_State on the
stack of the parent context. Right? And they need to stay there,
will be garbage collected. On the other hand, stack space is
precious and limited. And I will surly have hundreds of
connections... So, I need to
pop the lua_State from the stack and keep it somewhere and make Lua
interpreter understand that is not allowed to garbage collect it.
2. I need a method of keeping some kind of "state" or "session"
on each connection. This "session" is
opaque from c++ point of view. Must be opaque because the user of
the server must write his own
Lua scripts and keep his own state particular for each
application. For example, I have app1 and app2.
App1 must keep an username and a passowrd in his "session" and
app2 must keep a counter of some kind.
How about a coroutine per session: lua_newthread() & lua_resume()?
Session storage would come for free in the form of any local
Am I right? Any idea how can I keep this lua_State in the parent
Thank you very much for your help!
Well, I wouldn't worry too much a few hundred stack slots... but...
Will the stack be resized automatically? Or should I make something
Typically, to avoid collection, new threads can be placed into the
registry, or a designated table in the registry.
E.g. to create:
L2 = lua_newthread(L);
Stack status: elem1 elem2 ..... elemN thread true [top of the stack]
lua_settable(L, LUA_REGISTRYINDEX); // pops the thread from the
This is translated into:
t[thread]=true. Is this correct?
.. now do things with L2, e.g. push a function and lua_resume() it.
When the session expires, you can let garbage collection occur again
Stack status: elem1 elem2 ..... elemN thread nil [top of the stack]
t[thread]=nil. Is this correct? If it is that means that putting nil
value into a table removes that pair? Or the pair [thread,nil]
persists there... Because if it persists, I have a problem...
Also note that garbage collection and LUA_REGISTRYINDEX is shared
between the parent and all child states.
If I understood all this correctly, it will be a huge step forward for
Thank you so much!