[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Share proto object among multiple lua vm
- From: Tim Hill <drtimhill@...>
- Date: Thu, 20 Mar 2014 02:04:10 -0700
On Mar 19, 2014, at 9:25 PM, 云风 <firstname.lastname@example.org> wrote:
> There are many lua vm (more then 10K) in one process in our system. We
> run all of them by a thread pool. It runs well except huge memory
> usage , because the same byte codes exist in each vm .
> So I make a patch to lua 5.2.3 to share the same Proto objects among
> multiple lua vm .
> It introduces a new api : void lua_clonefunction (lua_State *L, const void * fp)
> We can get a lua function's pointer by lua_topointer first, and then
> pass it to lua_clonefunction to generate a new lua closure. The origin
> lua function can be in different lua vm .
> So we can put all the functions need to be share in an independent lua
> vm , and share them to other lua vm in the same process.
> It can also accelerate the vm's bootstrap , because no parser or
> undump needed .
>  https://gist.github.com/cloudwu/9656839
>  https://gist.github.com/cloudwu/9656890
This is something we’re also looking at for an in-house project, where many VM instances are running the same code and a significant (perhaps the MOST significant) amount of memory is consumed by loaded Lua bytecode.