powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что под капотом у std::mutex
131 сообщений из 131, показаны все 6 страниц
Что под капотом у std::mutex
    #40106872
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что под капотом у std::mutex ?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40106873
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загляни в соответствующий заголовок. Внезапно, там системный мутекс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40106874
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там я вижу pthread_mutex_t
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40106899
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧиТД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40106947
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indigodye0
Что под капотом у std::mutex ?
Всё, что угодно - на усмотрение разработчиков компилятора.
Главное, чтобы мьютекс имел описанные в стандарте свойства.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40106950
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indigodye0
Там я вижу pthread_mutex_t
В GNUC на Линуксе? Ну... Почему бы и нет?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107016
А что у .shared_lock() под капотом - стоит ли его юзать для multiple read/single write?

что скажете про pthread_rwlock* - они только для C ?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107034
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,

shared lock, rwlock - это все под капотом имеет обычный мьютекс со счетчиком.
Имеет смысл только при наличии медленных ридеров которые блокируют по чтению надолго.
Если же ридеры быстрые и долго блокировку не держат, то имеет смысл использовать обычный мьютекс, т.к. у него меньше оверхед.
Но конечно надо замерять в каждом конкретном случае.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107091
Anatoly Moskovsky, а зачем вообще на чтение блокировать?
ну если там не неск.секунд запись, а просто кинул в память и всё...
в этот момент чтение опасно?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107092
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
а зачем вообще на чтение блокировать?

Чтобы никто не писал пока читаешь.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107108
а как лучше блокировать, когда, например, в одном запросе пишут, а в другом читают?
1. заблокировать весь пишущий запрос
2. заблокировать в пишущем запросе все пишущие ф-и (т.е. вручную каждую отблочить)
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если читателей много а писателей мало или они редко делают операции - то можно попробовать
optimistic lock with timestamp. Я никогда не использовал это в С++. Только в Java.

Но если получится - то есть шанс сильно облегчить нагрузку на mutex заменив ее атомарными
операциями над timestamp.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107123
а там случайно нет такого инструмента, который можно 1 раз повесить на переменную, чтобы она автоматом блокировалась, когда в неё пишут?
Т.е. просто перечислить все переменные и пусть блочит их автоматом всегда, самым оптимистичным образом...
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107134
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю - нивелируется смысл мультипоточки. И кроме того старик Амдал топит за то чтобы
мы как можно меньше создавали таких мест в коде.

Кстати что в ней? Переменной? Счетчик? Можно атомик сделать. А если на этот счетчик смотрит
человек (для статистики) то зачем ему видеть каждое обновление? Пускай каждый поток аккумулирует
хотя-бы штук 10 итераций - потом сбрасывает изменения. Вобщем тут... с хитростью надо подойти.

Тогда и будет перформанс.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107137
переменные разные, от цифры до строки

mayton
Пускай каждый поток аккумулирует, хотя-бы штук 10 итераций, потом сбрасывает изменения.

а это как?
Поток просто выполнил свой запрос, запустил нужные ф-и, и отключился...
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
переменные разные, от цифры до строки

mayton
Пускай каждый поток аккумулирует, хотя-бы штук 10 итераций, потом сбрасывает изменения.

а это как?
Поток просто выполнил свой запрос, запустил нужные ф-и, и отключился...


А... ну здесь нет highload. Так что можешь спокойно мутксы использовать.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107145
ну запросов то может быть много в секунду...
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107147
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... сколько? 10? 100?

Тут я думаю метрика будет такая. Как только все профилировщики показывают что все потоки ждут
этот mutex - вот тогда и наступает highload. А до этого - можно не беспокоиться.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107150
там может быть всплеск, вплоть до миллионов
можно же умышленно нагрузить запись
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,

Давай макет сюда. С мутексом.

Чорт с тобой. Уламал
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107171
я ещё размышляю о том mutex или не mutex...
ну есть 2 направления: чтение и запись
в чтении ф-и для чтения
в записи ф-и для записи
их может быть много...
запросов может быть много...
за один запрос может быть затронуто несколько ф-й

вопрос в том, как блокировать:
бабушкин зайчик
1. заблокировать весь пишущий запрос
2. заблокировать в пишущем запросе все пишущие ф-и (т.е. вручную каждую отблочить)

и как быть с чтением во время записи?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107176
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
и как быть с чтением во время записи?

Для того и блокируют, чтобы во время записи никто не мог читать.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107177
Dima T
бабушкин зайчик
и как быть с чтением во время записи?

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

это только mutex делает или любая блокировка?
разве нет раздельных блокировок на запись и чтение?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107196
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
там может быть всплеск, вплоть до миллионов
можно же умышленно нагрузить запись
spin-lock на std::atomic.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107199
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень я понимаю ваших страданий ...
Если счётчик меняется "вне нашего контроля", то на него вешается volatile, чтобы компилятор не больно умничал.
Дальше есть два варианта:
1. Требуется "просто консистентное чтение";
2. Требуется, чтобы "счётчик не менялся ещё несколько операций после чтения".
Первое гарантируется аппаратурой, если переменная "не слишком велика". Найти сейчас неатомарный int возможно, но это - нетривиальная задача. Даже long, в основном - уже атомарный.
А второе из исходной постановки - как-то не очень просматривается.
И вот из этого когнитивного диссонанса "рождается секрет" вопрос: с чем боремся-то?
И второй вопрос из того же диссонанса: если вторая задача, то зачем узнавать подкапотные подробности стандартных вещей вопросами на форуме вместо чтения документации?

Или, всё-таки, профессионалы видят что-то такое, что недоступно понимаю тупых дилетантов?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107204
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
пропущено...

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

это только mutex делает или любая блокировка?

Любая, но мутекс в т.ч. для этих целей изобрели.
бабушкин зайчик
разве нет раздельных блокировок на запись и чтение?

Ты принципов потокобезопасности похоже не понимаешь.
Допустим есть табло, на нем написано слово ПАПА, писатель начинает побуквенно менять на слово ЖОРА, две буквы сменил, отвернулся третью взять, а тут читатель решил прочитать. Догадался что он прочитает ?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107235
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
я ещё размышляю о том mutex или не mutex...

вполне можно и обойтись))
- пишите код в одном потоке. Не переживайте, компьютер успеет))
- не расшаривайте один ресурс на несколько потоков сразу
- дробите или копируйте ресурс
- "высокий параллелизм - это компромиссы"
авторТак чем же придется пожертвовать при использовании стратегии высокого параллелизма? В зависимости от дизайна приложения, вам, возможно, придется выполнять операции чтения вне транзакций, даже когда операция чтения выполняется в целях изменения данных. «Минуточку!» – скажете вы: «Так нельзя – это может кончиться изменением данных, которые уже были изменены после их чтения!» Это правильное замечание, и заодно – это точка старта игры в компромиссы. При этой стратегии, поскольку вы не удерживаете блокировок данных на чтение, шансы на получение исключений, говорящих об устаревших данных, при операциях обновления увеличивается. Однако, как и в случае корабля Vasa, придется выбирать, какие характеристики важнее: надежная, пуленепробиваемая транзакционная стратегия (типа стратегии слоя API) или высокий параллелизм и пропускная способность. В ситуациях с большим количеством параллельных обращений очень трудно обеспечить и то, и другое, а если попытаться достичь этого, может оказаться, что приложение не делает хорошо ни того, ни другого.
http://www.k-press.ru/cs/2009/3/ts/ts.asp
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107236
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Ты принципов потокобезопасности похоже не понимаешь.
Допустим есть табло, на нем написано слово ПАПА, писатель начинает побуквенно менять на слово ЖОРА, две буквы сменил, отвернулся третью взять, а тут читатель решил прочитать. Догадался что он прочитает ?
Чтобы понимать принципы потокобезопасности, надо иметь представление о когерентности кэша процессора и атомарных инструкций процессора работы с памятью на целевой платформе.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107244
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,
"Для того чтобы судить о качестве приготовленной яичницы - необязательно уметь нести яйца" (с)
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107254
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Dima T
Ты принципов потокобезопасности похоже не понимаешь.
Допустим есть табло, на нем написано слово ПАПА, писатель начинает побуквенно менять на слово ЖОРА, две буквы сменил, отвернулся третью взять, а тут читатель решил прочитать. Догадался что он прочитает ?
Чтобы понимать принципы потокобезопасности, надо иметь представление о когерентности кэша процессора и атомарных инструкций процессора работы с памятью на целевой платформе.

Недавно смотрел доклад одного господина про Erlang и perfomance. И он упоминал о том что даже atomic (CAS)
зависит от количества ядер (кешей). Грубо говоря ты докидываешь в железо больше параллелизма, покупаешь
4 процессора по 16 и 24 ядер а работа CAS при этом не улучшается а ухудшается за счет необходимости проверять
большее число физических устройств кешей чтобы гарантировать проверку-установку.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107265
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
rdb_dev,
"Для того чтобы судить о качестве приготовленной яичницы - необязательно уметь нести яйца" (с)
Иными словами - не обязательно изучать микросхематехнику и проектировать процессоры? :)
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107271
Dima T
бабушкин зайчик
разве нет раздельных блокировок на запись и чтение?

Ты принципов потокобезопасности похоже не понимаешь.
Допустим есть табло, на нем написано слово ПАПА, писатель начинает побуквенно менять на слово ЖОРА, две буквы сменил, отвернулся третью взять, а тут читатель решил прочитать. Догадался что он прочитает ?

data race, race condition, false sharing... Кое-что понимаю.

DimaTВсе классы-контейнеры из std:: НЕпотокобезопасные, поэтому при многопоточной работе с ними надо дополнительно прописывать синхронизацию доступа.
Это сложно... А если просто под mutex засунуть запись в такой контейнер, то никто не сможет из него читать.
Говорят, корутины решают все проблемы асинхронности и НЕблокирующей синхронизации?

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

L1 обычно НЕ шарится, L2 шарится на 2 ядра, L3 шарится на 4... Кое-что понимаю.

PetroNotC Sharp
- пишите код в одном потоке. Не переживайте, компьютер успеет))

никогда он не успеет столько же прочитать, как в 20 потоков
PetroNotC Sharp
- не расшаривайте один ресурс на несколько потоков сразу

И как тогда читать в несколько потоков?
PetroNotC Sharp
- дробите или копируйте ресурс

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

mayton
Недавно смотрел доклад одного господина про Erlang и perfomance. И он упоминал о том что даже atomic (CAS)
зависит от количества ядер (кешей). Грубо говоря ты докидываешь в железо больше параллелизма, покупаешь
4 процессора по 16 и 24 ядер а работа CAS при этом не улучшается а ухудшается за счет необходимости проверять
большее число физических устройств кешей чтобы гарантировать проверку-установку.

Говорят, что каждому потоку надо выделять отдельный проц (или даже на процессы побить и кидать запросы в пул)...
По мне так это самое идеальное для сегодняшнего железа.
Другой вариант - микросервисы, где каждому сервису - свой компьютер.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107275
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, влияет не столько увеличение количества ядер, сколько увеличение количества DSM/NUMA узлов - процессорных юнитов, потому как взаимодействие между ядром одного процессора с памятью, адресуемой другим процессором, происходит по специальному MESI протоколу, например Intel QuickPath, который является "бутылочным горлышком".
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107278
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
rdb_dev
Чтобы понимать принципы потокобезопасности, надо иметь представление о когерентности кэша процессора и атомарных инструкций процессора работы с памятью на целевой платформе.

L1 обычно НЕ шарится, L2 шарится на 2 ядра, L3 шарится на 4... Кое-что понимаю.
Не то!
Нужно понимать, что такое cacheline, как они работают и как работают атомарные инструкции работы с ОЗУ, к примеру, такие как "xchg" или "lock cmpxchg".
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107287
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev, кстати, недавно проскакивала смежная тема 22370268 .
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107289
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
mayton, влияет не столько увеличение количества ядер, сколько увеличение количества DSM/NUMA узлов - процессорных юнитов, потому как взаимодействие между ядром одного процессора с памятью, адресуемой другим процессором, происходит по специальному MESI протоколу, например Intel QuickPath, который является "бутылочным горлышком".

Тогда надо кластеризовать процесcы вокруг узлов. Тоесть брать "ручное управление" вместо планировщика.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107291
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
DimaTВсе классы-контейнеры из std:: НЕпотокобезопасные, поэтому при многопоточной работе с ними надо дополнительно прописывать синхронизацию доступа.

Это сложно... А если просто под mutex засунуть запись в такой контейнер, то никто не сможет из него читать.
Надо засовывать под мьютекс или другую блокировку. И не только запись, а любое обращение к контейнеру. Чудес не бывает.
Чтобы могли читать - пишуший не должен блокировать навечно, только минимально необходимое для записи, в остальное время читатели пусть читают.
бабушкин зайчик
Говорят, корутины решают все проблемы асинхронности и НЕблокирующей синхронизации?

Кто говорит? Неблокирующая синхронизация строится на атомарных операциях. Есть потокобезопасные контейнеры построенные на этих принципах, но к std:: это не относится. Можешь почитать разработчика таких контейнеров https://habr.com/ru/users/khizmax/posts/

По сути неблокирующая синхронизация все равно блокирующая, только на уровне проца. Одно ядро запрещает другим читать некоторый участок памяти и производит его изменение, если в этот момент другие ядра попытаются туда писать/читать, то будут приостановлены до завершения работы ядра захватившего память.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик

Говорят, корутины решают все проблемы асинхронности и НЕблокирующей синхронизации?

Корутин - это просто функция с состоянием которую можно много раз вызывать. И все.

Сам по себе корутин ничего не решает. Решает наверное архитектура акторов которые по смыслу
- корутины читающие очередь сообщений. Но мне кажется что в этом топике - уж слишком
контр-продуктивно перескакивать на эту тему.

Это знаетели... начали пить за здравие - и закончили "за упокой души".

Уж лучше останемся в рамках мьютекса или критической секции.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107303
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
никогда он не успеет столько же прочитать, как в 20 потоков

Ну прочитал Войну и Мир за 3 сек. А дальше то что? Горд очень этим?
Бизнесу не надо читать на скорость (с)

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

Статью мою по ссылке про ПАРАЛЛЕЛИЗМ прочитал?
К компромиссам готов?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107307
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,

блокировки в веб проектах это плохой стиль архитектуры.
Верить или нет - твоё дело.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107315
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharpблокировки в веб проектах это плохой стиль архитектуры.

Уэб-проекты сами по себе это квинтэссенция плохой архитектуры, блокировками их
уже не испортишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107318
Dima T
Надо засовывать под мьютекс или другую блокировку. И не только запись, а любое обращение к контейнеру. Чудес не бывает.

А зачем любое? Если поток читает, а в этот момент другой пишет И блокирует, то первый же не сможет читать?
Он будет перечитывать после разблокировки или что произойдёт?

mayton
Корутин - это просто функция с состоянием которую можно много раз вызывать. И все.

так это обычная ф-я со static внутри ?

итого, на опыте, как задачу то решать?
бабушкин зайчик
я ещё размышляю о том mutex или не mutex...
ну есть 2 направления: чтение и запись
в чтении ф-и для чтения
в записи ф-и для записи
их может быть много...
запросов может быть много...
за один запрос может быть затронуто несколько ф-й

вопрос в том, как блокировать:
бабушкин зайчик
1. заблокировать весь пишущий запрос
2. заблокировать в пишущем запросе все пишущие ф-и (т.е. вручную каждую отблочить)

и как быть с чтением во время записи?

вообще не блокировать и всё в один поток?
корутинами?
блокировать куски контейнера во время записи?
выдать каждому контейнеру по микросервису и отдельный процесс?
(так то записи будет гораздо меньше, чем чтения, но запись ведь всегда можно нагрузить вручную...)

PetroNotC Sharp
Бизнесу не надо читать на скорость (с)

ну да, бизнесу надо, чтобы всё висело, а клиент ждал каждую операцию 10+ секунд
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107322
rdb_dev
бабушкин зайчик
пропущено...

L1 обычно НЕ шарится, L2 шарится на 2 ядра, L3 шарится на 4... Кое-что понимаю.
Не то!
Нужно понимать, что такое cacheline, как они работают и как работают атомарные инструкции работы с ОЗУ, к примеру, такие как "xchg" или "lock cmpxchg".

авторПри написании программы, которой требуется частый доступ к данным или их части, стоит помнить, что производительность будет выше, если запрашиваемые данные помещаются
в cache-line — блок памяти, целиком читаемый процессором при доступе к адресу в нем. На 64-битной машине он обычно занимает 64 байта, на других платформах — обычно 32 байта.

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

Если в вашем коде есть конкурентный (concurrent) доступ к данным, появляется третья проблема: «cache line bouncing».
Для минимизации трафика в шине следует располагать данные так, чтобы чтение из одного кэша и запись в другой производились с меньшим промежутком.

Да, это противоречит предыдущему замечанию, однако многопоточный код — это всегда сложно. Оптимизация многопоточного кода — тема, заслуживающая отдельной большой статьи.
Все, что я могу здесь сказать, такая проблема существует.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107323
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тогда надо кластеризовать процесcы вокруг узлов. Тоесть брать "ручное управление" вместо планировщика.
Да!
Поэтому операционки, как правило, выкидывают с user-space соответствующие функции API, позволяющие получать информацию о кол-ве ядер, процессоров и NUMA узлов, а также задавать предпочтительный логический процессор (ядро).
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107326
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
Надо засовывать под мьютекс или другую блокировку. И не только запись, а любое обращение к контейнеру. Чудес не бывает.

А зачем любое? Если поток читает, а в этот момент другой пишет И блокирует, то первый же не сможет читать?
Он будет перечитывать после разблокировки или что произойдёт?

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

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

Ты вроде написал что понял о чем речь 22388567 , но похоже что нет.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107329
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик, уже лучше!
Осталось только ознакомиться с работой инструкций: prefetch, clflush, mfence, sfence и lfence :)
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107332
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТы вроде написал что понял о чем речь, но похоже что нет.

А уж что будет когда он доберётся до множественных читателей, которым хочется
разрешить читать одновременно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107334
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
ну да, бизнесу надо, чтобы всё висело, а клиент ждал каждую операцию 10+ секунд
вроде есть правило для студентов чтобы не висело))))
- поток с ГУИ без длительных операций.
Теперь скажи - как чтение Война и Мир за 3 сек в доп потоке потребовали блокировки?
))))
Какие то студенческие ТЗ для размышлений.
Нам надо вас уговаривать на блокировки?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107336
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Иными словами - не обязательно изучать микросхематехнику и проектировать процессоры? :)
Необязательно даже знать о кэш-строках и протоколах когерентности.
Достаточно понимать про "атомарность" и "изменчивость"
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107340
Dima T
бабушкин зайчик
пропущено...

А зачем любое? Если поток читает, а в этот момент другой пишет И блокирует, то первый же не сможет читать?
Он будет перечитывать после разблокировки или что произойдёт?

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

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

Ты вроде написал что понял о чем речь 22388567 , но похоже что нет.

дело в том, что везде пишут про блокировки на запись...
а чтение блокировать якобы НЕ надо (в т.ч. и мультичтение вообще блокировать НЕ надо)

YouTube Video
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107341
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
никогда он не успеет столько же прочитать, как в 20 потоков
Где же вы все берёте источники бесконечной мощности? В астрале бесконечной силы?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107342
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, для этих целей в стандарте у экземпляров std::atomic есть метод load() с порядком доступа acquire.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107347
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Необязательно даже знать о кэш-строках и протоколах когерентности.
Достаточно понимать про "атомарность" и "изменчивость"
Очень желательно это знать, чтобы правильно выравнивать массивные структуры данных в памяти, к которым необходим конкурентный доступ.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107350
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Очень желательно это знать, чтобы правильно выравнивать массивные структуры данных в памяти, к которым необходим конкурентный доступ.
Достаточно знать всего одно "магическое" число - размер кэш-строки.
Знать о существовании кэшей и протоколов когерентности всё так же не требуется.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107351
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик

Корутин - это просто функция с состоянием которую можно много раз вызывать. И все.

так это обычная ф-я со static внутри ?

итого, на опыте, как задачу то решать?


Не обязательно. Корутина (со-программа) - это такой-себе хай-левел шаблон. Никто не обязывает
нас делать ее функцией со статик. Можно ее сделать классом. Итератор например можно тоже
считать ко-рутиной. Я знаю что Boost содержит поддержку корутин но я никогда не пользовался.
Есть языки программирование где есть поддержка yield return. На них можно удобнее реализовывать
такие функции.

И я не знаю как решать твою задачу. Ведь ты ее толком нигде не озвучил.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107353
mayton
Есть языки программирование где есть поддержка yield return.

C++20, например
mayton
И я не знаю как решать твою задачу. Ведь ты ее толком нигде не озвучил.

это наверное самая частая отмазка здесь
многопоточно писать/читать контейнер с минимальными блокировками - чем не задача?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107356
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Dima TТы вроде написал что понял о чем речь, но похоже что нет.

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

Можно еще версионность обсудить. Обычно когда блокировки не позволяют решать задачу - вводят
версионность. Даже для коллекций.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107358
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
дело в том, что везде пишут про блокировки на запись...
а чтение блокировать якобы НЕ надо (в т.ч. и мультичтение вообще блокировать НЕ надо)

автор if all readers then no locks required.
if the number of reads is much larger than the number of writes
- we might be able to use a readers/writer lock (std::shared_mutex)
if most operations are writes, then per-element mutex strategy might work, если там запись на ровно 1 элемент


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

Зеленым выделил, это как раз тот случай когда один писатель и много читателей.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107359
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И я не знаю как решать твою задачу. Ведь ты ее толком нигде не озвучил.
+1
)))
бабушкин зайчик
это наверное самая частая отмазка здесь...
многопоточно писать/читать контейнер - чем не задача?

ну дак выдели ЧАСТЬ кода для блокировки.
Рукописный контейнер полностью с нуля?
Описание требований к контейнеру где?
Что внутри контейнера?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107361
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто что думает про https://github.com/STEllAR-GROUP/hpx ?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107363
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
многопоточно писать/читать контейнер с минимальными блокировками - чем не задача?

авторНе бывает абстрактных сферических thread safe контейнеров в вакууме. И не может быть. Тех, кто употребляет такое слово применительно к контейнерам вообще, нужно нещадно бить батогами и ссылать в Сибирь
))
https://rsdn.org/forum/cpp/5342417.all
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107366
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик

это наверное самая частая отмазка здесь
многопоточно писать/читать контейнер с минимальными блокировками - чем не задача?

Вообще - не задача.

На Stackoverflow такие вопросы модераторы сразу закрывают. Нет конкретики. Нет понятного применения.

Сферические бенчмарки в вакууме чреваты тем что у всех будут разные результаты во первых.
А во вторых эффективность решения будет зависеть от многих параметров. Например от пропорции
читателей и писателей. И от того как долго писатель удерживает контейнер. И может быть даже
от того какова вероятность столкнуться двум потокам в мониторе. И может быть от того сколько
процессоров и ядер у тебя и сколько структур данных лежит в кешлиниях.

И корутины тут пока непричем потому что у тебя не акторная архитектура а просто основанная
на синхронности и конкуренции. Акторы - это про другое.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107369
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
mayton
Есть языки программирование где есть поддержка yield return.

C++20, например
mayton
И я не знаю как решать твою задачу. Ведь ты ее толком нигде не озвучил.

это наверное самая частая отмазка здесь
многопоточно писать/читать контейнер с минимальными блокировками - чем не задача?

Если один контейнер заменить на десять, то вероятность того что нужный контейнер свободен увеличится в десять раз. Мало на 10 - дели на 100 и т.д.

А вот можно ли заменить один на десять - это зависит от решаемой задачи.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107376
Dima T
Похоже ты сам не понимаешь то что процитировал.

ну найди там где-то утверждение, что надо блочить чтение
там про это вообще ни слова
автор- exactly one thread may update an element at any given time
- no other thread may read an element while the write is updating it
- more than one thread may read an element when no updates is in progress

Dima T
Если один контейнер заменить на десять, то вероятность того что нужный контейнер свободен увеличится в десять раз. Мало на 10 - дели на 100 и т.д.

блокировать зоопарк контейнеров по одному - это лучше, чем отдельная блокировка пишущих ячеек в одном контейнере?

PetroNotC Sharp
бабушкин зайчик
многопоточно писать/читать контейнер с минимальными блокировками - чем не задача?

авторНе бывает абстрактных сферических thread safe контейнеров в вакууме. И не может быть. Тех, кто употребляет такое слово применительно к контейнерам вообще, нужно нещадно бить батогами и ссылать в Сибирь
))
https://rsdn.org/forum/cpp/5342417.all
и что он имел ввиду под
авторКстати, если "лочить-разлочить" настолько большая проблема, что аж "надоело", то не пора ли пересматривать архитектуру ?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107382
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
Похоже ты сам не понимаешь то что процитировал.

ну найди там где-то утверждение, что надо блочить чтение
там про это вообще ни слова
автор- exactly one thread may update an element at any given time
- no other thread may read an element while the write is updating it
- more than one thread may read an element when no updates is in progress

Красным выделил что надо блочить чтение на время записи

бабушкин зайчик
Dima T
Если один контейнер заменить на десять, то вероятность того что нужный контейнер свободен увеличится в десять раз. Мало на 10 - дели на 100 и т.д.

блокировать зоопарк контейнеров по одному - это лучше, чем отдельная блокировка пишущих ячеек в одном контейнере?

Так будет работать быстрее и лучше распараллеливаться.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107385
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
блокировать зоопарк контейнеров по одному - это лучше, чем отдельная блокировка пишущих ячеек в одном контейнере?
ГОРИЗОНТАЛЬНОЕ масштабирование
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107389
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
и что он имел ввиду под
авторКстати, если "лочить-разлочить" настолько большая проблема, что аж "надоело", то не пора ли пересматривать архитектуру ?

22388622
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107390
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,
по кругу ходим.
Ты везде не прав ((
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107401
Dima T
бабушкин зайчик
пропущено...
ну найди там где-то утверждение, что надо блочить чтение
там про это вообще ни слова
- no other thread may read an element while the write is updating it

Красным выделил что надо блочить чтение на время записи

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

Dima T
бабушкин зайчик
пропущено...

блокировать зоопарк контейнеров по одному - это лучше, чем отдельная блокировка пишущих ячеек в одном контейнере?

Так будет работать быстрее и лучше распараллеливаться.

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

PetroNotC Sharp
бабушкин зайчик,
по кругу ходим.
Ты везде не прав ((

ну так сходи в другую тему.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107407
mayton
Тебе надо писать только в матрицу С.

ну и где проблема то?
создал матрицу C внутри ф-и, сложил туда A и B и вернул
если в этот момент в эти A/B -матрицы может идти запись, то заблочить + скопировать их внутрь ф-и (это же быстрее, чем блочить их на всё время перемножения)
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107409
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши код.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107410
mayton, ты когда задачу ставил, сам то её писал? Если да, то просто скажи, где там камень.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107411
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, причем тут std::mutex ?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107412
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... самый первый камень - это как распараллелить. Особенно с учотом того что доступ к матрице Б идет
неблагоприятным образом. Вертикальное сканирование double элементов - создает крайне неудачную игру
с кешом.

Какие будут предложения?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107413
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indigodye0
Коллеги, причем тут std::mutex ?

Да. Прошу прощения что мы тут нафлудили. Если мешает - я создам отдельный тред под умножение матриц.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107414
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
indigodye0
Коллеги, причем тут std::mutex ?

Да. Прошу прощения что мы тут нафлудили. Если мешает - я создам отдельный тред под умножение матриц.


Буду признателен
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107417
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107418
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107419
indigodye0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость


Спасибо !
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107425
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indigodye0Частые смены контекста потоков - приводят к частым инвалидациями кешей
К счастью их частота быстро падает с увеличением количества процессорных
ядер (а создавать больше потоков чем ядер не имеет смысла), а в поставленной
задаче с кэшем проблемы только у С.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107429
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
пропущено...

Красным выделил что надо блочить чтение на время записи

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

Если мы продолжаем про std::контейнеры, то в этом случае элемент это контейнер, ты же не знаешь что там внутри меняется при записи, поэтому блокировка доступа целиком к контейнеру.

бабушкин зайчик
Dima T
пропущено...
Так будет работать быстрее и лучше распараллеливаться.

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

От задачи зависит. Поэтому тебе написали что не бывает универсальных потокобезопасных контейнеров.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107432
А давайте задачу по thread-safe-containers рассмотрим с позиции нескольких процессоров...
Если потоки (или даже процессы?) выделять по 1 на процессор, а не на ядро, чтобы исключить косяки кэша (главная проблема, как я понимаю), то что можно из этого выжать?

Варианты:
- у каждого процессора свой конкретный набор контейнеров, в которые другие не лезут
- 1 процессор только пишет, другой только читает
- внутри процессора каждый поток работает только со своим куском контейнера (поток1 = 0-9999, поток2 = 10000-19999 и т.д.)
- ещё?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107438
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик, хитрец.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107449
бабушкин зайчик
Если потоки (или даже процессы?) выделять по 1 на процессор

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

в микросервисах у каждой задачи свой микросервис
но если они на одном сервере, то проблема с кэшами остаётся
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107451
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикто что можно из этого выжать?

Ничего. Вывод всё тот же: если вам понадобился контейнер для которого не хватает
простой полной сериализации любого доступа, то либо что-то не так с вашей
консерваторией, либо задача очень и очень специфична, а потому следует пойти и
потренироваться на кошках прежде чем к ней приступать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107454
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
А давайте задачу по thread-safe-containers рассмотрим с позиции нескольких процессоров...
Если потоки (или даже процессы?) выделять по 1 на процессор, а не на ядро, чтобы исключить косяки кэша (главная проблема, как я понимаю), то что можно из этого выжать?

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

Если рассуждаем про минимизацию тормозов на синхронизацию доступа к абстрактным данным, то не принципиально один проц многоядерный или несколько.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107457
Dimitry Sibiryakov
простой полной сериализации любого доступа

что имеется ввиду?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107462
Dima T
бабушкин зайчик
А давайте задачу по thread-safe-containers рассмотрим с позиции нескольких процессоров...
Если потоки (или даже процессы?) выделять по 1 на процессор, а не на ядро, чтобы исключить косяки кэша (главная проблема, как я понимаю), то что можно из этого выжать?

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

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

ну чё-то микросервисы это не останавливает... А они ещё медленнее.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107464
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикчто имеется ввиду?

Внезапно: применение сабжа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107517
а если в контейнере одни инты, там нужна блокировка?
Я имею ввиду, если запись в ячейку с интом, его же нельзя как-то поменять, чтобы кто-то прочитал пол-инта?
Или там прям побитово читается/пишется в одной ячейке памяти без блокировки всей ячейки?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107523
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thorn read для int зависит от аппаратуры, как уже сказано выше. Но проблема в
том, что из контейнера может исчезнуть сам int.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107524
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бабушкин зайчик>при мультичтении...
При "мультичтении" используются, например, https://en.cppreference.com/w/cpp/thread/shared_mutex
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107527
ну да, про это уже писали
Anatoly Moskovsky
бабушкин зайчик,

shared lock, rwlock - это все под капотом имеет обычный мьютекс со счетчиком.
Имеет смысл только при наличии медленных ридеров которые блокируют по чтению надолго.
Если же ридеры быстрые и долго блокировку не держат, то имеет смысл использовать обычный мьютекс, т.к. у него меньше оверхед.
Но конечно надо замерять в каждом конкретном случае.

я слышал, что shared_mutex - самый нежелательный из mutex-ов...
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107529
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
rdb_dev
Очень желательно это знать, чтобы правильно выравнивать массивные структуры данных в памяти, к которым необходим конкурентный доступ.
Достаточно знать всего одно "магическое" число - размер кэш-строки.
Знать о существовании кэшей и протоколов когерентности всё так же не требуется.
Достоверно его можно узнать только выполнив инструкцию cpuid.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107530
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
пропущено...Красным выделил что надо блочить чтение на время записи
Здесь написано, что во время записи надо блокировать элемент, чтобы его никто прочитать не смог.
Весь необходимый функционал для реализации этого есть в std::atomic.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107538
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Достоверно его можно узнать только выполнив инструкцию cpuid.
До столба тоже докапываться будем или просто возьмём 64 в качестве магического значения?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107552
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
а если в контейнере одни инты, там нужна блокировка?
Я имею ввиду, если запись в ячейку с интом, его же нельзя как-то поменять, чтобы кто-то прочитал пол-инта?
Или там прям побитово читается/пишется в одной ячейке памяти без блокировки всей ячейки?

Вот начинает проявляться конкретная задача :)

Но в общем случае все-равно нельзя, уточняй задачу. Ты же не говоришь в каком типе контейнера этот инт, как контейнер используется. Может пока ты его меняешь в одном потоке, другой в это время перемещает эту "ячейку" в другое место памяти.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107556
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
бабушкин зайчик
пропущено...
Здесь написано, что во время записи надо блокировать элемент, чтобы его никто прочитать не смог.
Весь необходимый функционал для реализации этого есть в std::atomic.

Такого нет
Код: plaintext
1.
std::atomic<std::vector<int>> elements;
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107557
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
я слышал, что shared_mutex - самый нежелательный из mutex-ов...

Да, он сам по себе тормоз, т.к. счетчик читателей гоняется между всех читающих потоков.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107565
Dima T
Ты же не говоришь в каком типе контейнера этот инт

в дефолтном - vector
используется по назначению - инты пишутся, инты читаются
Dima T
Может пока ты его меняешь в одном потоке, другой в это время перемещает эту "ячейку" в другое место памяти.

ну ячейка опустеет, в общем-то это же не проблема...
или он может читануть между копированием и удалением?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107574
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
а если в контейнере одни инты, там нужна блокировка?
Я имею ввиду, если запись в ячейку с интом, его же нельзя как-то поменять, чтобы кто-то прочитал пол-инта?
Или там прям побитово читается/пишется в одной ячейке памяти без блокировки всей ячейки?

В современных архитектурах запись-чтение в сырую память идет блочками по 64 байта.
Это - кеш-линия. Также atomic (CAS) будет работать. Только он будет блокировать
все копии этой страницы во всех кешах для достижения финала сравнения с обменом.

Тоесть очень сомнительно что кто-то прочитает пол-инта. Возможно лет 20 назад это было возможно.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107622
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
Ты же не говоришь в каком типе контейнера этот инт

в дефолтном - vector
используется по назначению - инты пишутся, инты читаются
Dima T
Может пока ты его меняешь в одном потоке, другой в это время перемещает эту "ячейку" в другое место памяти.

ну ячейка опустеет, в общем-то это же не проблема...
или он может читануть между копированием и удалением?

Конечно может. Например один поток вставляет элемент, внутри вектора места нет и вектор начинает выделение нового блока памяти и копирование, в этот момент другой поток обращается к элементу v[0] и что-то меняет в нем, но он уже скопирован и эти изменения просто потеряются. В лучшем случае словишь segfault если первый поток успеет память освободить пока второй с ней работает.

Даже без копирования можно потерять изменения, т.к. операции с интами не атомарны. Например два потока одновременно прочитали один элемент, поменяли и записали.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107631
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
До столба тоже докапываться будем или просто возьмём 64 в качестве магического значения?
Ладно, не будем!
Пусть будет "магическое 64". В принципе, приемлемо.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107633
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
rdb_dev
пропущено...Весь необходимый функционал для реализации этого есть в std::atomic.
Такого нет
Код: plaintext
1.
std::atomic<std::vector<int>> elements;

Естественно!
Пользовательский тип в std::atomic должен быть trivially copyable - с конструктором копии по умолчанию.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40107643
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тоесть очень сомнительно что кто-то прочитает пол-инта. Возможно лет 20 назад это было возможно.
Это и сорок лет назад было невозможно.
Уже Intel 8086 с 16-разрядной шиной памяти умел работать с префиксом LOCK и соответствующим ему аппаратным сигналом.
Возможно, что и 8080 умел, но "это я уже неотчётливо".
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108030
вот приходит запрос, ему выделяется поток
что делает запрос:
лезет в vector clients, а параллельно clients нужно почитать vector contracts, а также users и phones
это что - блокировка каждого из этих контейнеров?
или блокировка всей операции разом?
или с каждым вектором работает свой поток и между ними идёт обмен?
или что?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108044
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бабушкин зайчик>или что?

То, что реализовал программист. Было у него оранжевое настроение - он сделал так. А если бы было черное - то эдак.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
....а если он хотел чтобы апокалипсис начался прямо сейчас - сделал микросервисы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108053
а без воды если?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108056
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя вопрос из воды сделан, на него нет сухих ответов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108058
Dimitry Sibiryakov, а зачем тогда пишешь?
ладно бы ещё вопрос уточнял
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108059
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик а зачем тогда пишешь?
ладно бы ещё вопрос уточнял

Чтобы ты понял бесперспективность задавания таких вопросов. А уточнять в нём
нечего, он предельно ясен, что не делает его менее жидким.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108063
Dimitry Sibiryakov
бесперспективность задавания таких вопросов

тебе то откуда знать?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108069
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчиктебе то откуда знать?

"Опыт, сын ошибок трудных." (с)
С годами приходит понимание, что "есть много способов приготовить кошку" и не
все они неправильные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108071
слушай, если бы у тебя был опыт в многопоточке, ты бы писал про свой опыт
рассказал бы, что не так с этой задачей и как правильно
но ты просто льёшь воду и толку от твоего "опыта" даже не 0, а минус
по теме сказать нечего, но написать что-то надо...
странный ты, взрослый человек.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108077
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикесли бы у тебя был опыт в многопоточке, ты бы писал про свой опыт
рассказал бы, что не так с этой задачей и как правильно

Ты, походу, читать не умеешь. Выше я уже рассказал и про свой опыт и о том как
делать правильно и почему есть более одного "правильно". Или это было в
форкнувшемся топике?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108081
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
вот приходит запрос, ему выделяется поток
что делает запрос:
лезет в vector clients, а параллельно clients нужно почитать vector contracts, а также users и phones
это что - блокировка каждого из этих контейнеров?
или блокировка всей операции разом?
или с каждым вектором работает свой поток и между ними идёт обмен?
или что?

Зайчик - можно я скажу?

Я вижу что тут - вообще все не так. Просто в природе нет такой постановки как
"вот приходит запрос, ему выделяется поток".

Это очень low-level и никто так не программирует. Ну может микроконтроллеры разве что.

Приложения пишутся исходя из типового шаблона. Например CGI-приложение. FastCGI.
И вот это фреймворк который обрабатывает http-запрос - он уже имеет определенные
глобальные объекты. Сесссии. Пулы коннектов. Может быть какие-то объекты уровня
запроса-ответа. С коротким life-cycle.

Просто если мы не начнём с такого шаблона - то получается что мы пишем

Код: plaintext
1.
void main(int argc...) 



приложение, а это слишком общо. Мы не сможем просто договориться какие у нас уже есть
объекты и как мы работаем напрмер с сокетами. Выделенно. Или мультиплексированно.
Какого рода мультзадачность у нас. На процессах. На windows-потоках или не дай
бох на всяких posix....

Короче нам еще рано говорить о контейнерах.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108104
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
вот приходит запрос, ему выделяется поток
что делает запрос:
лезет в vector clients, а параллельно clients нужно почитать vector contracts, а также users и phones
это что - блокировка каждого из этих контейнеров?
или блокировка всей операции разом?
или с каждым вектором работает свой поток и между ними идёт обмен?
или что?

Чем дольше будешь держать блокировку, тем хуже будет параллелиться алгоритм ( Закон Амдала ).

Поэтому если хочешь максимальной производительности предусматривай отдельную блокировку для каждого контейнера. И держи ее минимум: заблокировал clients скопировал оттуда что надо, разблокировал, заблокировал contracts и т.д. и т.п.

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

В общем одного правильного решения нет, надо по конкретную задачу подстраиваться.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108108
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ общем одного правильного решения нет, надо по конкретную задачу подстраиваться.

Это я ему уже говорил, он не верит и требует серебряную пулю и прочее "one size
fits all".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108109
mayton
Я вижу что тут - вообще все не так. Просто в природе нет такой постановки как
"вот приходит запрос, ему выделяется поток".

а что есть в природе? Вот приходит запрос... и кто же его принимает?

mayton
Приложения пишутся исходя из типового шаблона. Например CGI-приложение. FastCGI.
И вот это фреймворк который обрабатывает http-запрос - он уже имеет определенные глобальные объекты. Сесссии. Пулы коннектов. Может быть какие-то объекты уровня запроса-ответа. С коротким life-cycle.

http-запрос прилетает в FastCGI, который такой же многопоточный, выделяет поток, в котором разбирается запрос, раскладывается по полочкам routing, GET/POST, etc...
а на выходе работаем с этими данными...
но логика то наша всё равно происходит в каком-то потоке!

mayton
Мы не сможем просто договориться какие у нас уже есть объекты и как мы работаем например с сокетами.

А зачем нам про сокеты договариваться? Это всё взял на себя Nginx и FastCGI (в твоём же примере)...
мы уже прошли всю network-стадию и имеем сырьё (детали запроса) для наших логических конструкций.
Переходим прямо к контейнерам!
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108110
Dima T
Поэтому если хочешь максимальной производительности предусматривай отдельную блокировку для каждого контейнера. И держи ее минимум: заблокировал clients скопировал оттуда что надо, разблокировал, заблокировал contracts и т.д. и т.п.

не даром все базы данных однопоточные...
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108111
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикно логика то наша всё равно происходит в каком-то потоке!

Да. В потоке. Ровно одном потоке. Который изолирован от остальных и (в идеале)
вообще не может с ними никак интерферировать. Поэтому в данной задаче сабж
смысла не имеет. Поэтому FastCGI - пример плохой.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108114
Dimitry Sibiryakov
бабушкин зайчикно логика то наша всё равно происходит в каком-то потоке!

Да. В потоке. Ровно одном потоке. Который изолирован от остальных и (в идеале) вообще не может с ними никак интерферировать. Поэтому в данной задаче сабж смысла не имеет. Поэтому FastCGI - пример плохой.
не понимаю я, что значит "не может интерферировать"...
вот этот поток работает с clients, а тут же пришёл ещё 1 запрос и соседний поток так же работает с clients...
и оба пишут...
и в каком месте тут mutex не имеет смысла?
Что тогда имеет смысл?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108116
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
Dima T
Поэтому если хочешь максимальной производительности предусматривай отдельную блокировку для каждого контейнера. И держи ее минимум: заблокировал clients скопировал оттуда что надо, разблокировал, заблокировал contracts и т.д. и т.п.

не даром все базы данных однопоточные...

С чего это вдруг? В полноценных СУБД постраничная блокировка. Если двум запросам не нужна одна и та же страница, то они выполняются параллельно.

Там проблемы распараллеливания в другом. В гарантии целостности. Из-за этого приходится долго держать блокировку чтобы гарантировать чтение согласованных данных.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108117
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикне даром все базы данных однопоточные...

А вот в эту тему лучше не лезть, поскольку может выясниться, что таки да, СУБД в
основном однопоточные. И чем новее - тем однопоточнее. Даже Джим Старки в
последние годы увлёкся NoSQL с полной сериализацией атомарных запросов. (И да,
"сериализация" здесь это выстраивание в строгую очередь, а не превращение блока
данных в поток.)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108119
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчики в каком месте тут mutex не имеет смысла?

В любом. HTTP - stateless протокол (и в этом его сила). Как следствие эти
FastCGI запросы и их потоки могут вообще выполняться на разных серверах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108121
Dimitry Sibiryakov
бабушкин зайчики в каком месте тут mutex не имеет смысла?

В любом. HTTP - stateless протокол (и в этом его сила). Как следствие эти FastCGI запросы и их потоки могут вообще выполняться на разных серверах.
они работают с одной БД... Пишут в одно и тоже место...
Я тебе описал реальный пример, как ты его без mutex решать хочешь?
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108123
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикЯ тебе описал реальный пример, как ты его без mutex решать хочешь?

Заявлю "это проблема СУБД, не моя" и вообще mutex использовать не буду по
причине, описанной выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108124
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья. Мне кажется мы ходим по кругу. Пора закруглятся.

Давайте еще раз прочитаем сообщения зайчика.

А что у .shared_lock() под капотом - стоит ли его юзать для multiple read/single write?
что скажете про pthread_rwlock* - они только для C ?
Anatoly Moskovsky, а зачем вообще на чтение блокировать?
ну если там не неск.секунд запись, а просто кинул в память и всё...
в этот момент чтение опасно?

а как лучше блокировать, когда, например, в одном запросе пишут, а в другом читают?
1. заблокировать весь пишущий запрос
2. заблокировать в пишущем запросе все пишущие ф-и (т.е. вручную каждую отблочить)

И просто подведем итоги.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108126
ты ни на один из этих вопросов так и не ответил
поэтому мне по 5 раз приходится спрашивать, как же правильно с контейнером работать конкурентно
наверное максимум инфы я тут от DimaT получил
ещё там кто-то что-то прояснял...
от тебя только какие-то виляния, которые логично завершаются попыткой закрытия темы.
...
Рейтинг: 0 / 0
Что под капотом у std::mutex
    #40108141
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчикпоэтому мне по 5 раз приходится спрашивать, как же правильно с контейнером
работать конкурентно

Ну ок, раз ты хочешь абсолютного и простого ответа, получи: с контейнером надо
работать в эксклюзивном режиме, под мутексом и никак иначе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
131 сообщений из 131, показаны все 6 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что под капотом у std::mutex
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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