17#ifndef A11_CONCURRENCY_CALLBACK_SCHEDULER_H_
18#define A11_CONCURRENCY_CALLBACK_SCHEDULER_H_
23#include <absl/functional/any_invocable.h>
25#include "thread/boost_primitives.h"
32class CallbackScheduler {
34 static constexpr size_t kDefaultMaxCallbacksPerTurn = 64;
35 static constexpr size_t kDefaultMaxConcurrentTurns = 2;
45 explicit CallbackScheduler(
46 size_t max_callbacks_per_turn = kDefaultMaxCallbacksPerTurn,
47 size_t max_concurrent_turns = kDefaultMaxConcurrentTurns)
48 : max_callbacks_per_turn_(max_callbacks_per_turn),
49 max_concurrent_turns_(max_concurrent_turns < 2 ? 2
50 : max_concurrent_turns) {
53 CallbackScheduler(
const CallbackScheduler&) =
delete;
54 CallbackScheduler& operator=(
const CallbackScheduler&) =
delete;
56 void Schedule(absl::AnyInvocable<
void() &&> callback);
61 const size_t max_callbacks_per_turn_;
62 const size_t max_concurrent_turns_;
64 std::deque<absl::AnyInvocable<void() &&>> callbacks_ ABSL_GUARDED_BY(mu_);
66 size_t active_turns_ ABSL_GUARDED_BY(mu_) = 0;
absl::StatusOr< RunOutcome > Run(const Source &source, const RunOptions &options)
Compiles source and runs its entry flow to completion.
Definition interpreter.cc:214
Definition callback_scheduler.cc:24
void Schedule(absl::AnyInvocable< void() && > work, thread::TreeOptions tree_options)
Schedule work on A11's fiber pool without returning a completion handle.
Definition executor.cc:47