Образцы пропускной способности очередей XRT 2

Для передачи данных между производителями и потребителями очереди дают как поштучный, так и пакетный интерфейсы. Пакетное резервирование амортизирует затраты на проверки и атомарную координацию по группе элементов — хороший выбор для высокопроизводительных нагрузок, которые естественно агрегируются.

SPSC · поштучно
28.81M элементов/с

Лёгкая передача данных между одним производителем и одним потребителем.

MPSC · пакет 32
98.30M элементов/с

Четыре производителя агрегируют работу, принимает один потребитель.

MPMC · пакет 32
134.4M элементов/с

Четыре производителя и четыре потребителя вместе обрабатывают данные очереди.

Медианы трёх прогонов из заархивированного 2026-07-28 бенчмарка (округлены), в элементах очереди в секунду. Среда и нагрузка ниже.

Железо и система

AMD Ryzen 5 5600
6 ядер / 12 логических процессоров
Windows 10 Pro 10.0.19045 x64

Сборка и исполнение

GCC 16.1.0 · C11
-O2 -Wall -Wextra -Werror
Последовательный замер, без привязки CPU

Нагрузка и статистика

500,000 элементов на производителя
Ёмкость 4,096 · размер пакета 32
3 независимых прогона, взята медиана

Полные образцы

Таблица прокручивается по горизонтали. Значения по прогонам сохранены, чтобы сравнения в идентичных условиях оставались возможными.

Очередь XRT 2, три образца пропускной способности, в элементах/с
Путь очередиПрогон 1Прогон 2Прогон 3Медиана
SPSC28,156,799.58628,811,967.33930,437,879.33228,811,967.339
MPSC8,135,048.3109,488,260.1768,070,233.6298,135,048.310
MPSC пакет 3298,299,903.17598,070,463.628117,955,825.54398,299,903.175
MPMC6,591,453.7856,627,232.4256,689,527.0106,627,232.425
MPMC пакет 32125,923,967.109136,885,043.940134,432,091.629134,432,091.629

Заархивированный источник: базовая линия пропускной способности очередей XRT 2 · записано на коммите aff1ac5a549a.

Инженерные решения за цифрами

Платформенно-родные сетевые бэкенды

IOCP, epoll, kqueue, io_uring и select сходятся в одну абстракцию порта: приложение держит один интерфейс, а каждый бэкенд использует возможности своей платформы.

API сетевого движка →

Пакетирование и переиспользование памяти

Пакетные интерфейсы очередей, пулы объектов, временные арены и буферы с подсчётом ссылок дают несколько способов организовать данные, срезая повторные выделения и затраты координации.

API очередей →

Аппаратное ускорение криптографии

Реализация AES несёт ускоренные пути x86 AES-NI / PCLMUL и ARM AES / PMULL, определяя возможности процессора в рантайме.

API криптографических примитивов →

Эффективный фундамент — в сетевые приложения

xhttp компонует пул HTTP-соединений, потоковую отправку/приём и серверный рантайм; xws компонует управление соединениями WebSocket, широковещание и отправку по ссылкам. Ядро даёт базовые пути данных; библиотеки расширения организуют доменные возможности.

Воспроизведите в своей среде

Склонируйте репозиторий, перейдите на записанный коммит бенчмарка и запустите встроенный скрипт в Windows PowerShell. При доступном из PATH GCC выполните три прогона подряд и сохраните выводы.

PowerShell · запуск в отдельном каталоге бенчмарка
git clone https://gitee.com/xywhsoft/xrt.git xrt-queue-bench
cd xrt-queue-bench
git checkout aff1ac5a549aaa0e2759e9af376f68a85e71261e
for ($sample = 1; $sample -le 3; ++$sample) {
    powershell.exe -NoProfile -ExecutionPolicy Bypass -File dev/bench/run_queue_bench_windows.ps1
}

Исходник бенчмарка на C · Скрипт запуска