9#include <unordered_set>
65 bool *write_allowed)
override;
100 const std::string &mod_origin =
"");
109 const std::string &mod_origin =
"");
122 void step(lua_State *L);
184 template <
typename T>
190 template <
typename T>
195 overlap += from.count(it.id);
247 PackedValue *param,
const std::string &mod_origin);
#define MYMAX(a, b)
Definition basic_macros.h:11
void snapshotJobs(T &to)
Definition s_async.h:185
unsigned int autoscaleMaxWorkers
Definition s_async.h:204
~AsyncEngine()
Definition s_async.cpp:34
std::unordered_set< u32 > autoscaleSeenJobs
Definition s_async.h:206
u32 queueAsyncJob(std::string &&func, std::string &¶ms, const std::string &mod_origin="")
Queue an async job.
Definition s_async.cpp:114
u64 autoscaleTimer
Definition s_async.h:205
std::vector< AsyncWorkerThread * > workerThreads
Definition s_async.h:231
std::deque< LuaJobInfo > jobQueue
Definition s_async.h:223
void stepJobResults(lua_State *L)
Process finished jobs callbacks.
Definition s_async.cpp:174
Semaphore jobQueueCounter
Definition s_async.h:234
std::deque< LuaJobInfo > resultQueue
Definition s_async.h:228
unsigned int getThreadingCapacity() const
Get the maximum number of threads that can be used by the async environment.
Definition s_async.h:127
AsyncEngine(Server *server)
Definition s_async.h:78
void registerStateInitializer(StateInitializer func)
Register function to be called on new states.
Definition s_async.cpp:65
std::unordered_set< u32 > stuckSeenJobs
Definition s_async.h:209
void putJobResult(LuaJobInfo &&result)
Put a Job result back to result queue.
Definition s_async.cpp:159
void stepStuckWarning()
Print warning message if too many jobs are stuck.
Definition s_async.cpp:238
void stepAutoscale()
Handle automatic scaling of worker threads.
Definition s_async.cpp:208
bool prepareEnvironment(lua_State *L, int top)
Initialize environment with current registred functions this function adds all functions registred by...
Definition s_async.cpp:262
bool getJob(LuaJobInfo *job)
Get a Job from queue to be processed this function blocks until a job is ready.
Definition s_async.cpp:141
void step(lua_State *L)
Engine step to process finished jobs.
Definition s_async.cpp:167
void(* StateInitializer)(lua_State *L, int top)
Definition s_async.h:75
std::vector< StateInitializer > stateInitializers
Definition s_async.h:215
u64 stuckTimer
Definition s_async.h:208
u32 jobIdCounter
Definition s_async.h:218
void initialize(unsigned int numEngines)
Create async engine tasks and lock function registration.
Definition s_async.cpp:72
std::mutex jobQueueMutex
Definition s_async.h:221
bool initDone
Definition s_async.h:200
void addWorkerThread()
Start an additional worker thread.
Definition s_async.cpp:91
size_t compareJobs(const T &from)
Definition s_async.h:191
bool cancelAsyncJob(u32 id)
Try to cancel an async job.
Definition s_async.cpp:128
std::mutex resultQueueMutex
Definition s_async.h:226
bool isErrored
Definition s_async.h:69
virtual ~AsyncWorkerThread()
Definition s_async.cpp:327
bool checkPathInternal(const std::string &abs_path, bool write_required, bool *write_allowed) override
Should check if the given path may be accessed.
Definition s_async.cpp:332
AsyncWorkerThread(AsyncEngine *jobDispatcher, const std::string &name)
Definition s_async.cpp:295
void * run() override
Definition s_async.cpp:348
AsyncEngine * jobDispatcher
Definition s_async.h:68
unsigned int getThreadingCapacity() const
Definition s_async.h:249
virtual void initAsync()=0
ScriptApiAsync(Server *server)
Definition s_async.h:241
bool cancelAsync(u32 id)
Definition s_async.cpp:436
u32 queueAsync(std::string &&serialized_func, PackedValue *param, const std::string &mod_origin)
Definition s_async.cpp:429
void stepAsync()
Definition s_async.cpp:441
AsyncEngine asyncEngine
Definition s_async.h:254
Definition s_security.h:28
Definition semaphore.h:18
Definition activeobjectmgr.cpp:11
std::unique_ptr< PackedValue > params_ext
Definition s_async.h:41
std::string mod_origin
Definition s_async.h:47
std::string function
Definition s_async.h:37
LuaJobInfo(std::string &&func, PackedValue *params, const std::string &mod_origin="")
Definition s_async.h:31
std::string result
Definition s_async.h:43
std::string params
Definition s_async.h:39
std::unique_ptr< PackedValue > result_ext
Definition s_async.h:45
LuaJobInfo(std::string &&func, std::string &¶ms, const std::string &mod_origin="")
Definition s_async.h:29
u32 id
Definition s_async.h:49
A packed value can be a primitive like a string or number but also a table including all of its conte...
Definition c_packer.h:72