### Class

# Dex ThreadPoolScheduler

unstable since: 1

#### Description [src]

    final class Dex.ThreadPoolScheduler : GObject.TypeInstance
    {
      /* No available fields */
    }

`DexThreadPoolScheduler` is a `DexScheduler` that will dispatch work items and fibers to sub-schedulers on a specific operating system thread.

`DexFiber` will never migrate from the thread they are created on to reduce chances of safety issues involved in tracking state between CPU.

New work items are placed into a global work queue and then dispatched efficiently to a single thread pool worker using a specialized async semaphore. On modern Linux using io_uring, this wakes up a single worker thread and therefore is not subject to “thundering herd” common with global work queues.

When a worker creates a new work item, it is placed into a work stealing queue owned by the thread. Other worker threads may steal work items when they have exhausted their own work queue.

Available since: 1

#### Hierarchy

#### Ancestors

- DexScheduler
- DexObject

#### Constructors

###### dex_thread_pool_scheduler_new

Creates a new `DexScheduler` that executes work items on a thread pool.

unstable since: 1

#### Functions

###### dex_thread_pool_scheduler_get_default

Gets the default thread pool scheduler for the instance.

unstable since: 1

#### Instance methods

##### Methods inherited from DexScheduler (3)

###### dex_scheduler_get_main_context

Gets the default main context for a scheduler.

unstable since: 1

###### dex_scheduler_push

Queues `func` to run on `scheduler`.

unstable since: 1

###### dex_scheduler_spawn

Request `scheduler` to spawn a `DexFiber`.

unstable since: 1

##### Methods inherited from DexObject (2)

###### dex_ref

Acquires a reference on the given object, and increases its reference count by one.

unstable since: 1

###### dex_unref

Releases a reference on the given object, and decreases its reference count by one.

unstable since: 1