Luajit IO framework(luajit.io)
luajit.io
Luajit IO framework
http://luajit.io
15 comments
Also check it:
[3] http://tarantool.org
[3] http://tarantool.org
Recently I was made aware of one gotcha of using lua/luajit from multiple threads (with lua/luajit vm context per thread). And the problem is simply due to underlying libc thread safety which I (finally) understood why Python did with it's global (per all VM's in the process) lock.
Simply - things like getenv() are not-thread safe, and not guaranteed to be if there is setenv(). Not lua/luajit's fault, but might be seen as such (higher level language, supposed to guard folks from things like that).
It suddenly changed my thinking of VM's in general and their interaction with the standard library and the OS.
(One can say maybe every function from libc/msvcrt/etc. must be thread-safe, but then there are things like errno, or getenv() returning pointer).
Simply - things like getenv() are not-thread safe, and not guaranteed to be if there is setenv(). Not lua/luajit's fault, but might be seen as such (higher level language, supposed to guard folks from things like that).
It suddenly changed my thinking of VM's in general and their interaction with the standard library and the OS.
(One can say maybe every function from libc/msvcrt/etc. must be thread-safe, but then there are things like errno, or getenv() returning pointer).
errno is supposed to thread local, so it should be thread safe.
Announcement with more details can be found here : http://permalink.gmane.org/gmane.comp.lang.lua.general/11626...
Speaking of Lua, here is a Lua 5.1 source code guide from creator of LuaJIT [1].
Really nice open source codebase to learn from.
[1] http://www.reddit.com/comments/63hth/ask_reddit_which_oss_co...
[1] http://www.reddit.com/comments/63hth/ask_reddit_which_oss_co...
That whole thread is really interesting. Lot's of amazing code bases to read.
At a time when nginx (at least the commercial version) is starting to emphasize nginx+javascript instead of nginx+lua, it's interesting to see a project try the opposite approach: take the nginx+lua combination and replace nginx with more lua.
The code features some extensive use of coroutines: https://github.com/kingluo/luajit.io/blob/master/lib/ljio/so...
I wonder how nice they are to use compared to threads, or even to node-style CPS.
I wonder how nice they are to use compared to threads, or even to node-style CPS.
It's basically the same as fibers in node. Also quite similar to goroutines running on just one cpu.
And also quite similar to kernel threads
Not at all like kernel threads, which are preemptive and in kernel space.
Very nice! I was looking for something like this a year or two ago, on my next lua/web project I'll try it out.
Site appears to be having performance issues. Never good PR for a new IO framework.
I wouldn't make too much of that. For all we know it could be running on a Raspberry Pi. It might be slow, but their public site is not the way to tell.
If I were looking for a stand-alone -no nginx- solution: Why would I use this instead of lev[1] or luvit[2] ?
[1] https://github.com/connectFree/lev/
[2] https://luvit.io/