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


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