[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua shared between processes
- From: Rob Shaw <rob@...>
- Date: Mon, 20 Mar 2006 17:14:09 +0100
Hi,
I found this thread in the archives, and decided to try having two
processes
look at the same lua state, as we use shared memory, and this might be
useful.
The good news is, I got it to work. In the thread was mentioned a
malloc
written by Doug Lea, which since version 2.8 has an "mspace" option,
allowing you to specify where the mallocs are going to be, for example,
in shared memory. So one invocation of the lua interpreter in one
window
sets up the lua world in shared memory, and a second lua in another
window just picks up the pointers in the shared memory. You can type
away
in one window in one process, and pick up where you left off in the
other
window in another process.
The bad news is, it's useless, at least for what we want to do. As
long as you
do one thing at a time, everything is fine, but if two processes do
something
at the same time, crashes result. I should have thought of this, but
if there is
just one stack, and two computations trying to use it simultaneously,
of course
there are going to be problems.
I guess what we want is to have the lua variables, tables, etc. in
shared memory,
but somehow have the lua virtual machines running separately. My
knowledge
of lua internals is still pretty minimal, so I don't know if this is
even possible.
We have other ways to do the job, just using c helper functions to
access the
stuff in shared memory, that work just fine. But I'm curious to know
whether
multiple luas working on the same data is a viable concept.
Thanks!
rob
----- Original Message -----
From: George Sealy <george@arl.co.nz>
Date: Saturday, March 13, 2004 5:21 pm
Subject: Lua shared between processes
> Hi all,
>
> I've been experimenting with Lua for work, and have found it to be
just
> the tool I was looking for. However, I have a problem that I was
hoping
> someone may be able to help me with.
>
> I need to have multiple processes running on a single machine
(Win32),
> all with access to a single instance of a "world state", which I
want to
> describe with Lua. My initial solution was to use shared memory in a
> dll, which would allow all processes to access the single set of
data.
> However, when I use lua_open to create a new state, I can't see a
way to
> make that pointer be in shared memory... Initially I thought I could
> create a copy of the Lua state variable, but that'll fall over
> internally whenever Lua needs more memory.
>
> The only other option I can think of is some form of communication
> between processes, such as TCP/IP or memory mapping, but the world
state
> needs to be accessed many (hundreds or even thousands of) times a
> second, so performance is an issue.
>
> If anyone has any advice, I'd really appreciate it. I'd rather avoid
> rewriting the entire language's memory allocation if I can help it!
>
> Thanks,
>
> George Sealy
>
> --
> George Sealy, PhD email : george@arl.co.nz
> Software Developer / Architect phone : +64 3 477 2995
> Animation Research Ltd
>