Skip to content

Scheduler API

Low-level scheduler API with fine-grained control.

Types

c
typedef struct fq_scheduler_t fq_scheduler_t;

typedef struct fq_scheduler_config_t {
    unsigned    thread_count;
    size_t      queue_capacity;
    fq_bool_t   enable_work_stealing;
    fq_bool_t   enable_priority;
    const fq_allocator_t *allocator;
    fq_log_fn   log_callback;
    void       *log_context;
    fq_log_level_t log_level;
} fq_scheduler_config_t;

typedef struct fq_scheduler_stats_t {
    unsigned thread_count;
    size_t   tasks_submitted;
    size_t   tasks_completed;
    size_t   tasks_canceled;
    size_t   tasks_pending;
    size_t   tasks_active;
    uint64_t total_wait_ns;
    uint64_t total_work_ns;
} fq_scheduler_stats_t;

Functions

Configuration

c
void fq_scheduler_config_default(fq_scheduler_config_t *config);

Initialize config with default values.

Creation / Destruction

c
fq_status_t fq_scheduler_create(
    fq_scheduler_t **scheduler,
    const fq_scheduler_config_t *config
);
fq_status_t fq_scheduler_shutdown(fq_scheduler_t *scheduler);

Task Submission

c
fq_status_t fq_scheduler_submit(fq_scheduler_t *scheduler, fq_task_t *task);
fq_status_t fq_scheduler_submit_fn(fq_scheduler_t *scheduler, fq_task_fn fn, void *user_data);
fq_status_t fq_scheduler_submit_with_future(
    fq_scheduler_t *scheduler, fq_task_t *task, fq_future_t **future
);

Lifecycle

c
void fq_scheduler_wait_idle(fq_scheduler_t *scheduler);
fq_bool_t fq_scheduler_is_idle(const fq_scheduler_t *scheduler);
fq_bool_t fq_scheduler_is_shutdown(const fq_scheduler_t *scheduler);
void fq_scheduler_cancel_all(fq_scheduler_t *scheduler);

fq_scheduler_cancel_all forcibly cancels all pending tasks and shuts down the scheduler.

Statistics

c
void fq_scheduler_stats(const fq_scheduler_t *scheduler, fq_scheduler_stats_t *stats);

Released under the MIT License.