[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Advice on running and reusing multiple threaded Lua states
- From: Rodrigo Dias Arruda Senra <rodrigo.senra@...>
- Date: Fri, 23 Mar 2012 10:56:28 -0300
Dear colleagues,
I seek your advice on a system we (www.hitecnologia.com) have been building.
We are using Lua as the embedded scripting language for a supervisory
system for
Industrial Automation Control. So far it was an excellent choice.
Since it was my first contact with Lua, I am uncertain about some design
decisions.
In the C++ app kernel, every time there is a demand for script
execution, we create
the Lua state, populate it with contextual info, load the standard Lua
libs and assign
it to a (system-)thread retrieved from a pre-allocated thread pool.
The user code for the script is wrapped in a template "function
<scriptName>(Param) <user code> end".
When the script finishes execution, the thread is returned to the pool
and the lua state
is destroyed. This is working, but I guess it can be improved.
My assumptions:
1) I did not use co-routines because the <user code> can do
arbitrary blocking operations (DBs, file system, etc).
Moreover, OS threads provide a simpler programming model
for the script developer (sometimes they are Engineers with
little background in programming).
If I could detect the absence of blocking calls, perhaps I could
transparently run the script in a coroutine instead of a OS thread.
But I decided not even to try this, even though it sounds a nice
research project.
My doubts:
1) Is it worth to pre-allocate a lua_State pool instead of creating it
every time ?
2) If so, in between executions is it enough to clean it using
settop(L,0) and
replacing its _ENV for a empty table ?
3) Instead of wrapping <user code> in the template function, could I
just push it
as a Lua chunk and pcall()-it ?
4) I have a common set of wrapped C-callbacks that are registered in
every Lua state.
Could I prepare a prototypical Lua State and clone it in the new Lua
state created
with some performance gain instead of registering its contents ?
I thank you for your time.
Cheers
Rod Senra
http://rodrigo.senra.nom.br--
Atenciosamente
_Rodrigo Dias Arruda Senra_
*Engenheiro de Computação*//