|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик а если в контейнере одни инты, там нужна блокировка? Я имею ввиду, если запись в ячейку с интом, его же нельзя как-то поменять, чтобы кто-то прочитал пол-инта? Или там прям побитово читается/пишется в одной ячейке памяти без блокировки всей ячейки? В современных архитектурах запись-чтение в сырую память идет блочками по 64 байта. Это - кеш-линия. Также atomic (CAS) будет работать. Только он будет блокировать все копии этой страницы во всех кешах для достижения финала сравнения с обменом. Тоесть очень сомнительно что кто-то прочитает пол-инта. Возможно лет 20 назад это было возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 21:50 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Ты же не говоришь в каком типе контейнера этот инт в дефолтном - vector используется по назначению - инты пишутся, инты читаются Dima T Может пока ты его меняешь в одном потоке, другой в это время перемещает эту "ячейку" в другое место памяти. ну ячейка опустеет, в общем-то это же не проблема... или он может читануть между копированием и удалением? Конечно может. Например один поток вставляет элемент, внутри вектора места нет и вектор начинает выделение нового блока памяти и копирование, в этот момент другой поток обращается к элементу v[0] и что-то меняет в нем, но он уже скопирован и эти изменения просто потеряются. В лучшем случае словишь segfault если первый поток успеет память освободить пока второй с ней работает. Даже без копирования можно потерять изменения, т.к. операции с интами не атомарны. Например два потока одновременно прочитали один элемент, поменяли и записали. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2021, 07:29 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Basil A. Sidorov До столба тоже докапываться будем или просто возьмём 64 в качестве магического значения? Пусть будет "магическое 64". В принципе, приемлемо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2021, 08:51 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Dima T rdb_dev пропущено...Весь необходимый функционал для реализации этого есть в std::atomic. Код: plaintext 1.
Пользовательский тип в std::atomic должен быть trivially copyable - с конструктором копии по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2021, 08:56 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
mayton Тоесть очень сомнительно что кто-то прочитает пол-инта. Возможно лет 20 назад это было возможно. Уже Intel 8086 с 16-разрядной шиной памяти умел работать с префиксом LOCK и соответствующим ему аппаратным сигналом. Возможно, что и 8080 умел, но "это я уже неотчётливо". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2021, 10:09 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
вот приходит запрос, ему выделяется поток что делает запрос: лезет в vector clients, а параллельно clients нужно почитать vector contracts, а также users и phones это что - блокировка каждого из этих контейнеров? или блокировка всей операции разом? или с каждым вектором работает свой поток и между ними идёт обмен? или что? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 12:30 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик>или что? То, что реализовал программист. Было у него оранжевое настроение - он сделал так. А если бы было черное - то эдак. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 12:49 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
....а если он хотел чтобы апокалипсис начался прямо сейчас - сделал микросервисы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 12:59 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
а без воды если? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:01 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
У тебя вопрос из воды сделан, на него нет сухих ответов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:10 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а зачем тогда пишешь? ладно бы ещё вопрос уточнял ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:12 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик а зачем тогда пишешь? ладно бы ещё вопрос уточнял Чтобы ты понял бесперспективность задавания таких вопросов. А уточнять в нём нечего, он предельно ясен, что не делает его менее жидким. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:15 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov бесперспективность задавания таких вопросов тебе то откуда знать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:26 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчиктебе то откуда знать? "Опыт, сын ошибок трудных." (с) С годами приходит понимание, что "есть много способов приготовить кошку" и не все они неправильные. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:40 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
слушай, если бы у тебя был опыт в многопоточке, ты бы писал про свой опыт рассказал бы, что не так с этой задачей и как правильно но ты просто льёшь воду и толку от твоего "опыта" даже не 0, а минус по теме сказать нечего, но написать что-то надо... странный ты, взрослый человек. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:44 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчикесли бы у тебя был опыт в многопоточке, ты бы писал про свой опыт рассказал бы, что не так с этой задачей и как правильно Ты, походу, читать не умеешь. Выше я уже рассказал и про свой опыт и о том как делать правильно и почему есть более одного "правильно". Или это было в форкнувшемся топике?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 13:59 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик вот приходит запрос, ему выделяется поток что делает запрос: лезет в vector clients, а параллельно clients нужно почитать vector contracts, а также users и phones это что - блокировка каждого из этих контейнеров? или блокировка всей операции разом? или с каждым вектором работает свой поток и между ними идёт обмен? или что? Зайчик - можно я скажу? Я вижу что тут - вообще все не так. Просто в природе нет такой постановки как "вот приходит запрос, ему выделяется поток". Это очень low-level и никто так не программирует. Ну может микроконтроллеры разве что. Приложения пишутся исходя из типового шаблона. Например CGI-приложение. FastCGI. И вот это фреймворк который обрабатывает http-запрос - он уже имеет определенные глобальные объекты. Сесссии. Пулы коннектов. Может быть какие-то объекты уровня запроса-ответа. С коротким life-cycle. Просто если мы не начнём с такого шаблона - то получается что мы пишем Код: plaintext 1.
приложение, а это слишком общо. Мы не сможем просто договориться какие у нас уже есть объекты и как мы работаем напрмер с сокетами. Выделенно. Или мультиплексированно. Какого рода мультзадачность у нас. На процессах. На windows-потоках или не дай бох на всяких posix.... Короче нам еще рано говорить о контейнерах. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 14:08 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик вот приходит запрос, ему выделяется поток что делает запрос: лезет в vector clients, а параллельно clients нужно почитать vector contracts, а также users и phones это что - блокировка каждого из этих контейнеров? или блокировка всей операции разом? или с каждым вектором работает свой поток и между ними идёт обмен? или что? Чем дольше будешь держать блокировку, тем хуже будет параллелиться алгоритм ( Закон Амдала ). Поэтому если хочешь максимальной производительности предусматривай отдельную блокировку для каждого контейнера. И держи ее минимум: заблокировал clients скопировал оттуда что надо, разблокировал, заблокировал contracts и т.д. и т.п. Если данные восновном читаются, то еще быстрее в каждом потоке держать копии контейнеров, и сделать что-то типа репликации, тогда блокировки нужны только для чтения обновления. В общем одного правильного решения нет, надо по конкретную задачу подстраиваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 15:22 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Dima TВ общем одного правильного решения нет, надо по конкретную задачу подстраиваться. Это я ему уже говорил, он не верит и требует серебряную пулю и прочее "one size fits all". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 15:40 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
mayton Я вижу что тут - вообще все не так. Просто в природе нет такой постановки как "вот приходит запрос, ему выделяется поток". а что есть в природе? Вот приходит запрос... и кто же его принимает? mayton Приложения пишутся исходя из типового шаблона. Например CGI-приложение. FastCGI. И вот это фреймворк который обрабатывает http-запрос - он уже имеет определенные глобальные объекты. Сесссии. Пулы коннектов. Может быть какие-то объекты уровня запроса-ответа. С коротким life-cycle. http-запрос прилетает в FastCGI, который такой же многопоточный, выделяет поток, в котором разбирается запрос, раскладывается по полочкам routing, GET/POST, etc... а на выходе работаем с этими данными... но логика то наша всё равно происходит в каком-то потоке! mayton Мы не сможем просто договориться какие у нас уже есть объекты и как мы работаем например с сокетами. А зачем нам про сокеты договариваться? Это всё взял на себя Nginx и FastCGI (в твоём же примере)... мы уже прошли всю network-стадию и имеем сырьё (детали запроса) для наших логических конструкций. Переходим прямо к контейнерам! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 15:43 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Dima T Поэтому если хочешь максимальной производительности предусматривай отдельную блокировку для каждого контейнера. И держи ее минимум: заблокировал clients скопировал оттуда что надо, разблокировал, заблокировал contracts и т.д. и т.п. не даром все базы данных однопоточные... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 15:51 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчикно логика то наша всё равно происходит в каком-то потоке! Да. В потоке. Ровно одном потоке. Который изолирован от остальных и (в идеале) вообще не может с ними никак интерферировать. Поэтому в данной задаче сабж смысла не имеет. Поэтому FastCGI - пример плохой. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 15:54 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov бабушкин зайчикно логика то наша всё равно происходит в каком-то потоке! Да. В потоке. Ровно одном потоке. Который изолирован от остальных и (в идеале) вообще не может с ними никак интерферировать. Поэтому в данной задаче сабж смысла не имеет. Поэтому FastCGI - пример плохой. не понимаю я, что значит "не может интерферировать"... вот этот поток работает с clients, а тут же пришёл ещё 1 запрос и соседний поток так же работает с clients... и оба пишут... и в каком месте тут mutex не имеет смысла? Что тогда имеет смысл? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 16:02 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Поэтому если хочешь максимальной производительности предусматривай отдельную блокировку для каждого контейнера. И держи ее минимум: заблокировал clients скопировал оттуда что надо, разблокировал, заблокировал contracts и т.д. и т.п. не даром все базы данных однопоточные... С чего это вдруг? В полноценных СУБД постраничная блокировка. Если двум запросам не нужна одна и та же страница, то они выполняются параллельно. Там проблемы распараллеливания в другом. В гарантии целостности. Из-за этого приходится долго держать блокировку чтобы гарантировать чтение согласованных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 16:04 |
|
Что под капотом у std::mutex
|
|||
---|---|---|---|
#18+
бабушкин зайчикне даром все базы данных однопоточные... А вот в эту тему лучше не лезть, поскольку может выясниться, что таки да, СУБД в основном однопоточные. И чем новее - тем однопоточнее. Даже Джим Старки в последние годы увлёкся NoSQL с полной сериализацией атомарных запросов. (И да, "сериализация" здесь это выстраивание в строгую очередь, а не превращение блока данных в поток.) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2021, 16:06 |
|
|
start [/forum/topic.php?fid=57&msg=40107631&tid=2017163]: |
0ms |
get settings: |
16ms |
get forum list: |
17ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
60ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
787ms |
get tp. blocked users: |
0ms |
others: | 318ms |
total: | 1207ms |
0 / 0 |