Jump to content

[REL] MTA Async Library [Multiple threads, Priority config]


Inlife

Recommended Posts

Posted (edited)

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"); 

Edited by Guest
  • Like 3
  • MTA Team
Posted

Looks nice, but your dependency is pretty useless for that library and you could have added that on your own with metatables.

Posted
Looks nice, but your dependency is pretty useless for that library and you could have added that on your own with metatables.

I thought about it. Maybe i'll do this in the next release. )

  • MTA Team
Posted

Nice one Inlife :) OOP ftw. Just one thing, it uses coroutines, which doesn't really utilise true threads.

Posted
Nice one Inlife :) OOP ftw. Just one thing, it uses coroutines, which doesn't really utilise true threads.

Thanks !

Yeah, that's why i tried to imitate something similar to threads. :)

I talked to bartbes (I know him), he said he's happy he's finally seen someone use his library :)

It's awesome library, i using it for 2 years now. Tell bartbes that im very grateful :D

Posted
looks nice and it can also be used to save scores?

I think so, it mostly depends on your realization. :)

Can you provide some example ?

Posted
There is error I can't use it: 'attempt to call global 'class' (a nil value) at line 7'

Download latest version of slither.lua (Dependency)

Download latest version of async.lua

Update your meta.xml

    <script src="path/to/lib/slither.lua" type="shared" /> -- it. 
    <script src="path/to/lib/async.lua" type="shared" /> 

Check it.

Posted
There is error I can't use it: 'attempt to call global 'class' (a nil value) at line 7'

Download latest version of slither.lua (Dependency)

Download latest version of async.lua

Update your meta.xml

    <script src="path/to/lib/slither.lua" type="shared" /> -- it. 
    <script src="path/to/lib/async.lua" type="shared" /> 

Check it.

I already do that but I changed the script location (path/to/lib/slither.lua) to (slither.lua) same for the second one

Posted
There is error I can't use it: 'attempt to call global 'class' (a nil value) at line 7'

Download latest version of slither.lua (Dependency)

Download latest version of async.lua

Update your meta.xml

    <script src="path/to/lib/slither.lua" type="shared" /> -- it. 
    <script src="path/to/lib/async.lua" type="shared" /> 

Check it.

I already do that but I changed the script location (path/to/lib/slither.lua) to (slither.lua) same for the second one

Changing path is ok.

I updated installation instructions.

https://github.com/Inlife/mta-lua-async#installation

Thanks for feedback :)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...