/* worker.h - bounded worker pool for hash/crypto jobs off the reactor path. */ #ifndef NAUT_WORKER_H #define NAUT_WORKER_H #include "naut/common.h" typedef struct naut_worker_pool naut_worker_pool; typedef struct naut_job naut_job; typedef void (*naut_job_fn)(naut_job *job); struct naut_job { naut_job_fn run; void *context; naut_err result; }; /* Jobs are caller-owned and must remain alive until popped from completions. * queue_capacity must be a power of two. cpu_base < 0 disables affinity. */ naut_worker_pool *naut_worker_pool_create(uint32_t threads, size_t queue_capacity, int cpu_base); void naut_worker_pool_destroy(naut_worker_pool *pool); bool naut_worker_submit(naut_worker_pool *pool, naut_job *job); bool naut_worker_complete(naut_worker_pool *pool, naut_job **job); /* Readable when one or more jobs complete. The caller drains the eventfd and * then pops completions. */ int naut_worker_eventfd(const naut_worker_pool *pool); uint32_t naut_worker_threads(const naut_worker_pool *pool); #endif /* NAUT_WORKER_H */