With 2000+ users, this sounds more like a job for 0MQ (www.zeromq.org). It has a well supported Lua binding too.
James Graves
I second James: keep Lua single threaded if you can and use a producer/consumer pattern. If 0MQ seems overkill, use some producer/consumer code in C but keep the Lua_State single-threaded in the consumer thread. 0x threading example (http://lilja.asteriski.fi/~sharlin/procon.cpp).