Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Стоимость
Сколько стоит собственный код фреймворка на одно сообщение в инструкциях и выделениях памяти и куда уходит эта стоимость.
AMD Ryzen 9 7900X 12-Core Processor, x86_64 (x86-64-v4), base unknown, min 427 MHz, max 5912 MHz, 12 physical, 24 logical, 62.4 GiB, 4800 MT/s, 6000 MT/s, DDR5, Linux 7.2.9-x64v3-xanmod1-1, 1.99.0, 3.25.1, bench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only), --no-default-features --features memory,macros,json. ruststream 0.7.0, измерено 2026-10-06.
Показать числа таблицей
| Сценарий | Инструкции | Выделения | Холодный старт |
|---|---|---|---|
| consume, JSON decode into a small struct | 1 673 | 0 | 15 079 / 26 |
| consume, JSON decode of a 1 KB body | 17 402,8 | 0 | 30 936 / 26 |
| consume on the byte lane, no codec | 826 | 0 | 14 192 / 26 |
| consume through a pool of four workers | 3 092,1 | 0 | 27 005 / 43 |
| consume on four dedicated threads | 457,1 | 0 | 55 119 / 133 |
| consume through a middleware stack of one | 1 723 | 0 | 15 205 / 26 |
| consume through a middleware stack of four | 1 768 | 0 | 15 252 / 26 |
| consume in batches of 64 | 1 529,5 | 0 | 16 432 / 29 |
| reply, encoded to a declared destination | 2 641 | 2 | 16 787 / 29 |
| reply to a transport that reads the payload | 2 106 | 0 | 16 294 / 29 |
| publish through an Out slot with one transform | 3 768 | 6 | 18 540 / 33 |
| publish with a typed header contract | 3 632 | 5 | 17 990 / 32 |
| read a typed header contract, then publish | 4 004,9 | 2 | 17 762 / 29 |
| request and reply, one round trip | 9 361,6 | 13 | 23 358 / 39 |
| a delivery that asks to be redelivered, natively by the broker | 3 157,7 | 0 | 16 662 / 26 |
Числа показывают установившийся режим на одно сообщение на брокере внутри процесса, поэтому транспорта в них нет. При наведении или фокусе строка показывает холодный старт: сколько вместе стоили запуск сервиса и первая доставка. Его платят один раз.
Приём доставки ничего не выделяет. Цикл держит одну ячейку для доставки и один буфер кодирования,
а каждый этап - обобщённый тип, который разрешается при компиляции, без динамических вызовов по
пути. DynStack из слоёв, выбранных во время
работы, стоит одного упакованного Future на слой на сообщение. Продолжение
and_after - один упакованный Future, и платит
за него только доставка, которая его задала.
Ответ ничего не выделяет, если клиент брокера только читает байты: ему одалживают буфер цикла. Брокер внутри процесса сохраняет то, что ему передали, поэтому его ответ стоит буфера, в который писал кодек. Остальные строки публикации выделяют то, что брокер внутри процесса хранит от каждого сообщения, и то, что сценарий строит сам: значение заголовка или одноразовый ящик запроса.
Дороже всего в декодировании размер содержимого: сравните тело в 1 КБ с маленькой структурой. Бенчмарки публикуют каждый сценарий вместе с методикой, а также сравнение с сырым клиентом каждого брокера.