sig
  type t = Async_core.Scheduler.t
  val t : unit -> t
  val invariant : t Core_kernel.Invariant_intf.inv
  val current_execution_context : t -> Async_core.Execution_context.t
  val with_execution_context :
    t -> Async_core.Execution_context.t -> f:(unit -> 'a) -> 'a
  val set_execution_context : t -> Async_core.Execution_context.t -> unit
  val add_job : Async_core.Execution_context.t -> ('-> unit) -> '-> unit
  val main_execution_context : Async_core.Execution_context.t
  val add_job2 : t -> Async_core.Job.t -> unit
  val cycle_start : t -> Core.Std.Time.t
  val run_cycle : t -> unit
  val run_cycles_until_no_jobs_remain : unit -> unit
  val next_upcoming_event : t -> Core.Std.Time.t option
  val uncaught_exn : t -> Core.Std.Error.t option
  val num_pending_jobs : t -> int
  val num_jobs_run : t -> int
  val cycle_times : t -> Core.Std.Time.Span.t Async_core.Async_stream.t
  val cycle_num_jobs : t -> int Async_core.Async_stream.t
  val cycle_count : t -> int
  val set_max_num_jobs_per_priority_per_cycle : t -> int -> unit
  val set_check_access : t -> (unit -> unit) option -> unit
  val check_access : t -> unit
  val check_invariants : t -> bool
  val set_check_invariants : t -> bool -> unit
  val set_record_backtraces : t -> bool -> unit
  val events : t -> Async_core.Job.t Core.Std.Timing_wheel.t
  val add_finalizer :
    t ->
    'Core.Std.Heap_block.t -> ('Core.Std.Heap_block.t -> unit) -> unit
  val add_finalizer_exn : t -> '-> ('-> unit) -> unit
  val set_thread_safe_finalizer_hook : t -> (unit -> unit) -> unit
  val force_current_cycle_to_end : t -> unit
  type 'a with_options =
      ?monitor:Async_core.Monitor.t -> ?priority:Async_core.Priority.t -> 'a
  val within' :
    ((unit -> 'Async_core.Deferred.t) -> 'Async_core.Deferred.t)
    with_options
  val within : ((unit -> unit) -> unit) with_options
  val within_v : ((unit -> 'a) -> 'a option) with_options
  val schedule' :
    ((unit -> 'Async_core.Deferred.t) -> 'Async_core.Deferred.t)
    with_options
  val schedule : ((unit -> unit) -> unit) with_options
  val preserve_execution_context :
    ('-> unit) -> ('-> unit) Core.Std.Staged.t
  val preserve_execution_context' :
    ('-> 'Async_core.Deferred.t) ->
    ('-> 'Async_core.Deferred.t) Core.Std.Staged.t
  val within_context :
    Async_core.Execution_context.t ->
    (unit -> 'a) -> ('a, unit) Core.Std.Result.t
  val find_local : 'Core.Std.Univ_map.Key.t -> 'a option
  val with_local :
    'Core.Std.Univ_map.Key.t -> 'a option -> f:(unit -> 'b) -> 'b
  val reset_in_forked_process : unit -> unit
  val sexp_of_t : t -> Sexplib.Sexp.t
end