8.1 Модель исполнения
- Единица исполнения — задача: лёгкая корутина со своим стеком. Задачи выполняются на пуле потоков ОС (по умолчанию — по потоку на ядро) с перераспределением работы (work stealing).
- Ввод-вывод реализации СЛЕДУЕТ делать через io_uring (Linux), kqueue (macOS/BSD), IOCP (Windows).
- Реализация ДОЛЖНА вытеснять задачу, выполняющуюся без точек приостановки дольше 10 мс (механизм определяется реализацией).
- Вызовы
blocking { … }и FFI-функции без атрибута@nonblockingвыполняются в отдельном пуле блокирующих потоков. @pinnedна функции или акторе привязывает задачу к одному потоку (shard-per-core); такая задача никогда не мигрирует.
Определяется реализацией. Бэкенд ввода-вывода и вытеснение (D-8051; DIV-035; D-1600..D-1604). Эта реализация: сетевой и файловый ввод-вывод — через единый io_uring процесса (на ядрах без него или при
OXL_NO_IO_URING=1— неблокирующие сокеты и один поток epoll; файловые операции без io_uring — пул блокирующих потоков); kqueue и IOCP не реализованы. Вытеснение задач, работающих дольше 10 мс, — поток-монитор и сигнал; проверка вытеснения стоит на обратных рёбрах циклов, причём в самом внутреннем цикле — не реже одного раза на 1024 итерации (D-8063; D-7680).
Определяется реализацией. Переполнение стека (D-8051; DIV-003; D-3562). Стандарт о переполнении стека молчит. Эта реализация: стек задачи — 256 КиБ, корневой задачи
main— 8 МиБ; переполнение — чистая паникаstack overflow(сообщение в stderr, код выхода 101), а не аварийное завершение процесса по сигналу. Развёртывания стека (defer, деструкторы) при этом не происходит, так как стек исчерпан.
Связанные диагностики
См. также
Исходник: docs/spec/oxl-standard.md