gLUA engine details

Garrysmod uses NOT lua, but lua-jit.

This can be confirmed via benchmarks and also the available jit commands like:

This means that the "2 - Lua Performance Tips" pdf and the lua-users "Optimisation Tips" articles are not always correct.

For some benchmarks between lua and lua-jit you can visit

gLUA is lua-jit expanded with a few custom functions. That's why others and myself call it "gLUA", because it has noticable differences to other lua implementations.
A good rule of thumb for detecting custom garrysmod lua functions and default lua functions: If the function of a module, e.g. math.Distance, starts with a capital letter then it is a custom garrysmod function.
Examples: - math.log, math.random - inbuilt, default lua functions - math.Rand, math.Clamp - garrysmod lua functions

gLUA is also single-threaded and the main execution thread of the gmod "runtime".
If you run a very expensive function in a for loop on a client then the window becomes unresponsive and the game may freeze.
If you have unoptimised functions on a server then the whole server is going to lag behind and maybe become unplayable.

The binding of source engine to LUA is done via hooks.
The source engine calls a hook, e.g. serversided PlayerSay, whenever such an event, e.g. a player sends a chat message, happens ingame.
This also means, if a hook runs way too long and gets called very often, that the engine waits for the response and thus starts to lag. This can be easily observed if you have a very long sql.Query in a net.Receive function on the server: The whole server freezes until the database returns the result. (This problem happened with luctus_logs in the beginning but is fixed since beta)