MTA Lua Asynchronous Computing 
Description: 
MTA:SA Async library. If you have some heavy cyclic operations, that are dropping "Infinite/too long execution", or operations that "freeze" your server for couple seconds, you can use this library. It supports multiple running threads at a time. 
Installation & Instructions: 
https://github.com/Inlife/mta-lua-async 
Enable debug, if you need to (it will print some useful information in server console) 
Async:setDebug(true); 
 
Iterate on interval from 1 to 50,000,000 while calculating some data on every iteration 
(if you run standart "for" cycle, mta server will "freeze" for several seconds) 
Async:iterate(1, 50000000, function(i) 
    local x = (i + 2) * i; -- heavy opreation 
    outputServerLog(x); 
end); 
 
Iterate over big array of data 
Async:foreach(vehicles, function(vehicle) 
    vehicle:setHealth(1000); 
end); 
 
There also an options for changing speed of your async caclulations: 
Async:setPriority("low");    -- better fps 
async:setPriority("normal"); -- medium 
async:setPriority("high");   -- better perfomance 
  
-- or, more advanced 
async:setPriority(500, 100); 
-- 500ms is "sleeping" time,  
-- 100ms is "working" time, for every current async thread 
 
Example: 
local _connection; -- initialized database connection 
local vehicles = {}; 
  
Async:setDebug(true); 
Async:setPriority("low"); 
  
dbQuery(function(qh) 
    local data = dbPoll(qh, 0);  
  
    Async:foreach(data, function(vehicle) 
  
        local _vehicle = createVehicle( vehicle.model, vehicle.x, vehicle.y, vehicle.z ); 
        -- other stuff 
        -- ... 
        table.insert(vehicles, _vehicle); 
  
    end); 
  
    -- and run dummy cycle at the same time (just for fun ) 
    Async:iterate(0, 500000, function(num) 
        outputServerLog(num); 
    end); 
  
end, _connection, "SELECT * FROM vehicles");