powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что под капотом у std::mutex
25 сообщений из 131, страница 2 из 6
Что под капотом у 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
25 сообщений из 131, страница 2 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что под капотом у std::mutex
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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