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

Читателю неизвестно о существовании объекта до тех пор, пока он не находится в консистентном состоянии.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38219936
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WesttrdДохтаР,

Читателю неизвестно о существовании объекта до тех пор, пока он не находится в консистентном состоянии.

Вы исключаете возможность изменения состояния в процессе работы читателя над обьектом ?
Как писатели узнает о том, что обьект сейчас обрабатывается читателем ?

У вас синхронный конвеер ? ( в один момент времени с обьектом работает одна нить исполнения и по конвееру передает обьект дальше)

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

Я писал про исключительно имплементации очередей FIFO.
После попадания в очередь объект, как правило, не изменяется.

В случае, если изменение возможно, применяются иные архитектурные решения.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220050
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WesttrdДохтаР,

Я писал про исключительно имплементации очередей FIFO.


Поэтому я задал наводящие вопросы про конвеер, для однозначности понимания.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220151
Westtrdсамый производительный способ,

Это решение описано в специализированных проектах - курсор читателя если они не связаны логически, ДОЛЖЕН быть независимым, и оверхеда тут практически никакого
А как писатель узнает, что читатель уже прочитал данную запись?
И как читатели узнают какие записи им читать, чтобы не было чтений одной записи разными читателями, или они идут с шагом i = n * count_of_readers?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220241
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читатель уже прочиталИ как читатели узнают какие записи им читать, чтобы не было чтений одной записи разными читателями,

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

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

Пока на ресурсе есть шаред блокировка все могут читать паралельно никому не мешая ,
но изменять никто не может пока все читающие ее не отпустят.

приблизительно так.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220313
ДохтаРчитатель уже прочиталИ как читатели узнают какие записи им читать, чтобы не было чтений одной записи разными читателями,

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

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

Пока на ресурсе есть шаред блокировка все могут читать паралельно никому не мешая ,
но изменять никто не может пока все читающие ее не отпустят.

приблизительно так.
Это все понятно. Вопрос не в этом.
Если стоит задача раскидать работу по ядрам, то в любом случае то, что делает одно ядро/поток/читатель не должны делать другие ядра/потоки/читатели.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220481
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
читатель уже прочитал,

А нафига это знать писателю если хранилище статичное?
Архитектура курсора предусматривает знание о том, какой элемент last pop'ped у каждого курсора.

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

It depends, в общем. Но в любом случае это не функционал ни писателя, ни читателя, а хранилища.

Читатели не в курсе про внутреннее строение хранилища, он запрашивает, дай-ка мне указатель на следующий элемент интересующей меня структуры.

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

Это вопрос правильной имплементации архитектуры.
Когда требование FIFO принципиально, как правило, о распараллеливании речи идти не может или же это по критериям производительности неуместно.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220756
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Westtrdдай-ка мне указатель на следующий элемент интересующей меня структуры.
А почему вы считаете что тут можно без барьеров обойтись?
А если в очередь будет добавлен указатель на структуру, а сама структура еще не синхронизирована по всем ядрам?
Барьеры решают именно подобные проблемы.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220779
Westtrdчитатель уже прочитал,

А нафига это знать писателю если хранилище статичное?
Архитектура курсора предусматривает знание о том, какой элемент last pop'ped у каждого курсора.
Хранилище имеет конечный размер и когда-то закончится, значит нужен re-use, и писатель должен знать можно уже перезаписывать элемент или нельзя, т.е. писатель должен знать позицию курсора каждого читателя.
А для этого каждый читатель должен будет после каждого сдвига курсора делать store barrier или надеяться на то, что хранилище никогда не переполниться с потерей записей.

WesttrdВ одновременном чтении несколькими читателями одной и той же записи не вижу никакой проблемы, хотя в критичных местах это нежелательно, тогда архитектура разбивается на последовательные однопоточные участки с моделью отношений 1P-1C
Если задача стоит каждому читателю читать каждую запись, то да - проблемы нет. Но если стоит задача, где писатель должен раздавать задачи, которые должны брать свободные на данный момент читатели - то проблема.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220799
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Это не страшно, и решается внутренней логикой.
Барьеры негативно влияют на латенси, в данном случае работа на спине часто выгоднее.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220804
Westtrdраскидать работу по ядрам,

Это вопрос правильной имплементации архитектуры.
Когда требование FIFO принципиально, как правило, о распараллеливании речи идти не может или же это по критериям производительности неуместно.
Если все читатели и писатель работают в пределах одного ядра, и распараллеливание не требуется, то может подойдут corutines, которые советует Anatoly Moskovsky.
А если читатели и писатель раскиданы по ядрам, и пусть даже все читатели читают одни и те же записи, то в любом случае одни читатели будут опережать других, и кто-то уже все прочитал, а кто-то только первый элемент, и об этом должен будет знать писатель перед тем, как затереть этот элемент при переполнении хранилища.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220809
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
переполниться с потерей записей,

1. Хранилище страничное.
2. Вариант повторного использования с очисткой и инвалидацией курсора предусмотрен.

Как правило, мои приложения выполняются на системе с достаточным количеством RAM. Обычно в 50 и более раз нежели известная пиковая нагрузка.

По второй части соглашусь, но я бы это делал не на стороне писателя, а на стороне читателя чз диспетчера читателей. Тут и батчинг работает и подобного рода вещи.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220813
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WesttrdЭто не страшно, и решается внутренней логикой.
Что значит не страшно?
Вам что все равно какие данные увидит читатель, новые или те которые он по этому адресу в прошлый раз читал?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220818
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
читатели и писатель раскиданы,

Писателю все равно, что там делают читатели. Вы при создании хранилища устанавливаете стратегию управления страницами.

Если страницы повторно используются, писатель имеет значения курсора читателей и время заполнения страницы с опциональной очисткой после разрешенного интервала.

Занимается этим фоновый менеджер хранилища.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220821
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Данные после добавления не изменяются.
Это FIFO.

До приведения записи в консистентное состояние читатель об этом не узнает в принципе.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220822
Anatoly MoskovskyWesttrdдай-ка мне указатель на следующий элемент интересующей меня структуры.
А почему вы считаете что тут можно без барьеров обойтись?
А если в очередь будет добавлен указатель на структуру, а сама структура еще не синхронизирована по всем ядрам?
Барьеры решают именно подобные проблемы.
Вряд ли Westtrd сознается, но что-то подсказывает, что там вся надежда на неявные барьеры при вытеснении кэша, вероятность которых высока на относительно большом размере хранилища.
Можно конечно их вызов вручную детерминировать, допустим для условия - каждые 64КБ или 1мкс, но этож надо самому писать, а вытеснение автоматически. Только вот нюанс, есть условия при которых оно не сработает.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220827
WesttrdКак правило, мои приложения выполняются на системе с достаточным количеством RAM. Обычно в 50 и более раз нежели известная пиковая нагрузка.
А ну вот я про это и говорил. Тут некоторые вещи упрощаются. А переполнение в принципе не предусмотрено, или при нем включается другая стратегия работы хранилища?
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220829
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
большом размере хранилища,

Это не военная тайна, описано в проектах, то есть тут эксплуатируется тот факт, что при существенной интенсивности потока сообщений это происходит с высокой вероятностью, и в отношении латенси это значительно выгоднее барьеров.

Кроме того, думающий админ повесит писателя и читателя этого хранилища на ядра одного процессора.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220830
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WesttrdДо приведения записи в консистентное состояние читатель об этом не узнает в принципе.
А что вы понимаете под консистентным состоянием записи?
Если запись больше одного машинного слова, то даже если вы ее полностью сформировали на одном ядре, то на другом ядре она может быть лишь частично сформирована.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220831
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
некоторые вещи упрощаются,

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

Курсор контролируется хранилищем, хранилище осведомлено о том, когда запись переходит в консистентное состояние.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220841
Westtrdбольшом размере хранилища,

Это не военная тайна, описано в проектах, то есть тут эксплуатируется тот факт, что при существенной интенсивности потока сообщений это происходит с высокой вероятностью, и в отношении латенси это значительно выгоднее барьеров.

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

Повесить всех читателей и писателя на одно ядро? Насколько я помню потоки на ядре переключаются примерно раз в 1мс, т.е. это сразу +(1мс X кол-во читателей) к задержке.
Синхронизация двух ядер через LLC(L3) с барьером 30нс, т.е. минимум в 30 000 раз меньше.
...
Рейтинг: 0 / 0
Потоковый сервер на С++
    #38220844
Westtrd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
читателей и писателя на одно ядр,

Основная модель - 1P-1C
Ключевые фиды мессаджинга работают на выделенных процессорных ядрах.
...
Рейтинг: 0 / 0
25 сообщений из 94, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Потоковый сервер на С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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