Сообщение Re[3]: COW устарел, осторожнее с его использованием? от 23.08.2022 23:32
Изменено 23.08.2022 23:34 SaZ
Re[3]: COW устарел, осторожнее с его использованием?
Здравствуйте, pax123, Вы писали:
P>Да, я понял. Проблема не столько в COW как таковом, а в его применении для стандартных контейнеров. А так — вполне можно сделать COW контейнер, просто надо указать, что между потоками нужно глубокое копирование/клонирование
Чтобы это сделать, надо для каждой строки будет хранить thread id и запрашивать его на каждый чих. Тоже слишком оверхед. На самом деле, если нужны такие жёсткие оптимизации, то всегда можно сделать узкоспециализированными строками.
P>>>Не совсем понял, а когда это строки стали thread safe?
SaZ>>Я так понял, что тут имелась в виду самописная реализация. Несколько нетривиально сделать корректный неблокирующий контейнер. Не будешь же с каждой строкой таскать мьютекс.
P>Стандартные контейнеры все вроде не тред сейф
Смотря что понимать под "стандартными" и "тред сейф". В Qt это QSharedData и релевантные. Сам COW — всегда потокобезопасный, работа с элементами — нет.
P>Да, я понял. Проблема не столько в COW как таковом, а в его применении для стандартных контейнеров. А так — вполне можно сделать COW контейнер, просто надо указать, что между потоками нужно глубокое копирование/клонирование
Чтобы это сделать, надо для каждой строки будет хранить thread id и запрашивать его на каждый чих. Тоже слишком оверхед. На самом деле, если нужны такие жёсткие оптимизации, то всегда можно сделать узкоспециализированными строками.
P>>>Не совсем понял, а когда это строки стали thread safe?
SaZ>>Я так понял, что тут имелась в виду самописная реализация. Несколько нетривиально сделать корректный неблокирующий контейнер. Не будешь же с каждой строкой таскать мьютекс.
P>Стандартные контейнеры все вроде не тред сейф
Смотря что понимать под "стандартными" и "тред сейф". В Qt это QSharedData и релевантные. Сам COW — всегда потокобезопасный, работа с элементами — нет.
Re[3]: COW устарел, осторожнее с его использованием?
Здравствуйте, pax123, Вы писали:
P>Да, я понял. Проблема не столько в COW как таковом, а в его применении для стандартных контейнеров. А так — вполне можно сделать COW контейнер, просто надо указать, что между потоками нужно глубокое копирование/клонирование
Чтобы это сделать, надо для каждой строки будет хранить thread id и запрашивать его на каждый чих. Тоже слишком оверхед. На самом деле, если нужны такие жёсткие оптимизации, то всегда можно сделать узкоспециализированными строками.
P>>>Не совсем понял, а когда это строки стали thread safe?
Я так понял, что тут имелась в виду самописная реализация. Несколько нетривиально сделать корректный неблокирующий контейнер. Не будешь же с каждой строкой таскать мьютекс.
P>Стандартные контейнеры все вроде не тред сейф
Смотря что понимать под "стандартными" и "тред сейф". В Qt это QSharedData и релевантные. Сам COW — всегда потокобезопасный, работа с элементами — нет.
P>Да, я понял. Проблема не столько в COW как таковом, а в его применении для стандартных контейнеров. А так — вполне можно сделать COW контейнер, просто надо указать, что между потоками нужно глубокое копирование/клонирование
Чтобы это сделать, надо для каждой строки будет хранить thread id и запрашивать его на каждый чих. Тоже слишком оверхед. На самом деле, если нужны такие жёсткие оптимизации, то всегда можно сделать узкоспециализированными строками.
P>>>Не совсем понял, а когда это строки стали thread safe?
Я так понял, что тут имелась в виду самописная реализация. Несколько нетривиально сделать корректный неблокирующий контейнер. Не будешь же с каждой строкой таскать мьютекс.
P>Стандартные контейнеры все вроде не тред сейф
Смотря что понимать под "стандартными" и "тред сейф". В Qt это QSharedData и релевантные. Сам COW — всегда потокобезопасный, работа с элементами — нет.