Информация об изменениях

Сообщение Re: Асинхронные стримы (IAsyncEnumerable) от 23.09.2021 12:54

Изменено 23.09.2021 13:23 VladCore

Re: Асинхронные стримы (IAsyncEnumerable)
Здравствуйте, Sinclair, Вы писали:

S>Коллеги, кто уже гонял сабж в продакшн или достаточно внимательно в тестах?


S>Хочу понять, каковы накладные расходы.


Легко получить накладные расходы бенчмарками, да
1. если под await сеть, то сравнить await foreach и foreach для TcpListener на localhost и 127.0.0.1. разница будет потому что MTA разный
2. если под await диск, то сравнить await foreach и foreach для RAM-диска или оптан диска. На всякий случай упомяну что асинхронная работа в FileStream сильно переписана в 6м Core. В 5м много чего в Async-методах всё еще реализовано абы как (синхронно)
3. если под await потоки (например ManualResetEventSlim.Wait — самая быстрая реализация) то я уже делился задержками. Они большие: 1 микросекунда в Core на Windows, 2 — Core на линукс, 4 — на NetFramework и 16 — в моно. на кажую итерацию. Это всё на Intel Xeon 6го поколения.

4й вариант — сравнить в Dapper await foreach и foreach. Тут разница конечно сильно большая будет в SQLite и MS SQL Shared Memory и MS SQL TCP IP. Вобщем работы много.
Re: Асинхронные стримы (IAsyncEnumerable)
Здравствуйте, Sinclair, Вы писали:

S>Коллеги, кто уже гонял сабж в продакшн или достаточно внимательно в тестах?


S>Хочу понять, каковы накладные расходы.


Легко получить накладные расходы бенчмарками, да
1. если под await сеть, то сравнить await foreach и foreach для TcpListener на localhost и 127.0.0.1. разница будет потому что MTA разный
2. если под await диск, то сравнить await foreach и foreach для RAM-диска или оптан диска. На всякий случай упомяну что асинхронная работа в FileStream сильно переписана в 6м Core. В 5м много чего в Async-методах всё еще реализовано абы как (синхронно)
3. если под await потоки (например ManualResetEventSlim.Wait — самая быстрая реализация) то я уже делился задержками. Они большие: 1 микросекунда в Core на Windows, 2 — Core на линукс, 4 — на NetFramework под Windows, и 16 — в моно. на кажую итерацию. Это всё на Intel Xeon 6го поколения.

4й вариант — сравнить в Dapper await foreach и foreach. Тут разница конечно сильно большая будет в SQLite и MS SQL Shared Memory и MS SQL TCP IP. Вобщем работы много.