powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Потоковый сервер на С++
19 сообщений из 94, страница 4 из 4
Потоковый сервер на С++
    #38220848
Westtrdчитателей и писателя на одно ядр,

Основная модель - 1P-1C
Ключевые фиды мессаджинга работают на выделенных процессорных ядрах.
А почему для 1P-1C не используете coroutines?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220854
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не используете coroutines?,

Опыт показал худшие результаты.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220856
Westtrdне используете coroutines?,

Опыт показал худшие результаты.
Не профилировали в чем их затык и оверхед?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220884
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в чем их затык и оверхед?,

Управление остановкой и возобновлением треда
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221009
Westtrdв чем их затык и оверхед?,

Управление остановкой и возобновлением треда
Anatoly Moskovsky , ну вот, а вы говорили coroutines легкие и быстрые :)
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221014
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coroutines легкие и быстрые,

Мы ж код не видели.
Может он их создавал непосредственно при вызове, а не заранее.
Создание coroutine содержит оверхед на создание стека, т.е. выделение в куче и в ОСи соответствующих блоков памяти. Это не так много как оверхед создания обычного потока, но и не мало.

Но переключение контекста между двумя уже созданными coroutine имеет оверхед в виде копирования нескольких регистров (причем не всех) в память и обратно - не знаю что тут может быть медленным.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221059
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskycoroutines легкие и быстрые,

Мы ж код не видели.
Может он их создавал непосредственно при вызове, а не заранее.
Создание coroutine содержит оверхед на создание стека, т.е. выделение в куче и в ОСи соответствующих блоков памяти. Это не так много как оверхед создания обычного потока, но и не мало.

Но переключение контекста между двумя уже созданными coroutine имеет оверхед в виде копирования нескольких регистров (причем не всех) в память и обратно - не знаю что тут может быть медленным.

Мне кажется что мы пытаемся экономить на спичках .

Переключение контекста нитей тербует
востановление состояния всех регистров.
Затраты соизмеримы с вызовом-выходом_из функции.
Это спички.

Гораздо больше ресурсов в том числе и как минимум 2 барьера
дожно уйти на вычисление ,
какой из нитей или конитей когда передавать управление
и куда ( на какое ядро).
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221082
ДохтаРAnatoly Moskovskycoroutines легкие и быстрые,

Мы ж код не видели.
Может он их создавал непосредственно при вызове, а не заранее.
Создание coroutine содержит оверхед на создание стека, т.е. выделение в куче и в ОСи соответствующих блоков памяти. Это не так много как оверхед создания обычного потока, но и не мало.

Но переключение контекста между двумя уже созданными coroutine имеет оверхед в виде копирования нескольких регистров (причем не всех) в память и обратно - не знаю что тут может быть медленным.

Мне кажется что мы пытаемся экономить на спичках .
А у Westtrd своё хранилище оказалось заметно быстрее использования готовых корутинов.

ДохтаРПереключение контекста нитей тербует
востановление состояния всех регистров.
Затраты соизмеримы с вызовом-выходом_из функции.
Это спички.

Гораздо больше ресурсов в том числе и как минимум 2 барьера
дожно уйти на вычисление ,
какой из нитей или конитей когда передавать управление
и куда ( на какое ядро).
Ещё достаточно большая часть кэша должна быть обновлена, подгружены новые PE в TLB. Но все это мелочи по сравнению с редкой частотой переключения контекста не позволяющей делать low latency обработку.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221099
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДохтаР,

Согласен, основа неблокирующих очередей как раз в избежании контекст свича.
Кроме того, суть хранилища в том, чтобы балансировать нагрузку и различие в пропускной способности читателя и писателя.

Я не говорю о том, что читатель всегда медленнее, но тем не менее.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221100
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
своё хранилище,

Все верно, но для меня было еще важно не столько достичь средней латенси на хорошем уровне, но и получить некие гарантии, что не будет существенных спайков.

Изложенный механизм это позволил сделать. Пока это моя Конституция ) Далее время покажет.

Хотя это очень специализированное решение, и глупо было бы его распространять на все попавшиеся под руку случаи.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221120
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

В ULL выделение ресурсов на лету считается дурным тоном :)
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221122
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
своё хранилищеДохтаРпропущено...


Мне кажется что мы пытаемся экономить на спичках .
А у Westtrd своё хранилище оказалось заметно быстрее использования готовых корутинов.



Когда стоит вопрос выбора красивый-умный ( производительный-надежный)
Я бы ИМХО выбирал умный.
Закладывая мутексы барьеры переключения контекстов
итд в разумном количестве ,
до того как возникнут проблемы с происком UB в логике приложения.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38221143
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДохтаР,

Решение, безусловно, специализированное
И таргетированное на совершенно конкретную микроархитектуру, так оно и собирается, с соответствующей оптимизацией.

Насчет UB. Жесточайшие юниттесты с динамически изменяемой нагрузкой пока ничего не выявили.
И в дебаге стоит немереное количество ассертов.

Риски все поняты, измерены и приняты, цели высокие и жертвы понятны.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38315160
Anatoly MoskovskyПро локфри.

В Бусте 1.53 появились несколько локфри контейнеров, в том числе очередь, которая наиболее часто используется для передачи сообщений между потоками.
А сейчас эти lock-free контейнеры используются в самой boost.asio 1.53 - 1.54beta или собираются их использовать в будущих реализациях boost.asio?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38315170
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lock-free контейнеры,

В 1.53 на библиотеку lockfree нет ссылок из других библиотек.
Про намерения - не в курсе.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38315180
Anatoly Moskovskylock-free контейнеры,

В 1.53 на библиотеку lockfree нет ссылок из других библиотек.
Про намерения - не в курсе.
А что сейчас используется в boost.asio для "раскидывания" задач по потокам из пула, обычная очередь с мьютексом?
Она одна или на каждый поток из пула своя блокировочная очередь, чтобы можно было через post() из разных потоков ставить задачи в очередь выполняющего потока?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38315283
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lock-free контейнеры,

Насколько я помню, очередь одна на все потоки и защищена стандартным мьютексом.
Лень копаться в коде, чтобы перепроверить это.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38315289
Anatoly Moskovskylock-free контейнеры,

Насколько я помню, очередь одна на все потоки и защищена стандартным мьютексом.
Лень копаться в коде, чтобы перепроверить это.
Т.е. "по легенде" освободившийся поток сам берет себе из этой общей очереди очередное задание?
По идее тогда проблем не должно было быть с заменой lock-based очереди на lock-free.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38315297
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lock-free контейнерыПо идее тогда проблем не должно было быть с заменой lock-based очереди на lock-free.
Сначала нужно доказать, что вообще будет выигрыш от такой замены :)
...
Рейтинг: 0 / 0
19 сообщений из 94, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Потоковый сервер на С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]