powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MSVC и GCC: совместимость кодировок исходников
25 сообщений из 409, страница 15 из 17
MSVC и GCC: совместимость кодировок исходников
    #39897206
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожимая плечами

Хорошо. Давайте синтетический тест. C двумя потоками и со строками. Посмотрим на него.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897209
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И я очень удивлён тем что ты нашел (!) реально нашел
проблему аллокации строк на СТЫКЕ UI и динамической памяти.

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

mayton
Ты вот думаешь что для comparison двух utf-8 строк тебе надо обязательно
ре-аллоцировать (malloc/realloc) память? А я вот так не думаю.

Я так не думаю. Агоритмически я считаю, что их можно сравнить без аллокации памяти. Но так следует из интерфейса Qt - что бы сравнить строки на Qt их нужно нормализовать, а что бы нормализовать нужно обратиться к динамической памяти:

Код: plaintext
1.
QString QString::normalized(QString::NormalizationForm mode, QChar::UnicodeVersion version = QChar::Unicode_Unassigned) const;


Плиз, обрати внимание на слово const в конце сигнатуры. И на возвращаемый тип.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897212
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
И я очень удивлён тем что ты нашел (!) реально нашел
проблему аллокации строк на СТЫКЕ UI и динамической памяти.

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

Дружище petrav. Я по прежнему не понимаю где там они чего будут блокировать.
Давай всё таки сделаем синтетический тест и посмотрим на него.

Предлагаю также подумать о хеш-коде нормализованной строки.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897215
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Дружище petrav. Я по прежнему не понимаю где там они чего будут блокировать.
Давай всё таки сделаем синтетический тест и посмотрим на него.

Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897218
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Еще один вариант испанского мальчика жрущего креветок.

Код: python
1.
>>> 'El nío come camarön'




Хотя я нормализацию не заказывал. На печати в консоли выглядит так.

'El nío come camarön'

Код: python
1.
2.
>>> len('El nío come camarön')
21



И длина - 21 символ с точки зрения строкового API

После нормализации.

Код: python
1.
>>> unicodedata.normalize('NFC',u'El nío come camarön')



'El nío come camarön'
Код: python
1.
>>> len(unicodedata.normalize('NFC',u'El nío come camarön'))



19

Не знаю как будет видно сырую строку после публикации. Но моя bash консоль вполне себе
нормально отображает эти 2 символа с диакритикой с явной нормализацией и без. И среда разработки тоже если скопировать.

Но чисто визуально я вижу различия после normalize. Символ слегка изменен. Хотя суть наверное та-же.

самое время посмотреть на работу регекспов, сабстрингов и прочих требовательных ф-й
ну они то конечно же в питоне подогнаны под эти костыли, но какой ценой...
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897220
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petrav

Ты сейчас просто описал работу ЛЮБОЙ си-прогаммы которых много. Но в топике мы говорим о твоей
проблеме. О проблеме перформанса. Я здесь пока проблемы не вижу.

Я очень не люблю и не хочу фантазировать (фантазия у меня богатая) за топик стартера. И я все-таки
настаиваю чтобы ты обрисовал где мы блочимся. Если это malloc/free - то почему. Дро...им память.
Может там одна и та-же строка миллиард раз аллоцируется? Почему мы это не видели? Может
очень длинная строка? почему на прикланом уровне мы такое допустили? Зачем она нужна
такая длинная в твоём Реал-тайм приложении.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897221
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
mayton
Еще один вариант испанского мальчика жрущего креветок.

Код: python
1.
>>> 'El nío come camarön'




Хотя я нормализацию не заказывал. На печати в консоли выглядит так.

'El nío come camarön'

Код: python
1.
2.
>>> len('El nío come camarön')
21



И длина - 21 символ с точки зрения строкового API

После нормализации.

Код: python
1.
>>> unicodedata.normalize('NFC',u'El nío come camarön')



'El nío come camarön'
Код: python
1.
>>> len(unicodedata.normalize('NFC',u'El nío come camarön'))



19

Не знаю как будет видно сырую строку после публикации. Но моя bash консоль вполне себе
нормально отображает эти 2 символа с диакритикой с явной нормализацией и без. И среда разработки тоже если скопировать.

Но чисто визуально я вижу различия после normalize. Символ слегка изменен. Хотя суть наверное та-же.

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

Вот откуда взялся этот мальчик.
https://www.w3resource.com/python/python-bytes.php

Я там кстати ошибку допустил. Во втором слове не 3 а 4 символа должно быть. И этот
мой тест надо еще раз перетестить.

А по поводу регулярок. Я думаю что под капотом у питона обычная С-библиотека. Просто меня
интересовали best-practices и подходы в отношении мульти-национальным строкам и кодировкам
в разных языка. А змей удобен для быстрого прототипирования. Написал в REPL консоли - и получил ответ.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897223
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Боюсь, ты и 500 строк создания не приведешь в ГУИ.
Так как даже при отрисовке Война и мир там стоит
Canvas.DrawText()
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897227
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravДело в том что структура динамической памяти - это по сути Синглетон.

Спешу тебя огорчить: это уже давно не так. Общая куча делится на пулы по числу ядер,
которые работают независимо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897228
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Ты сейчас просто описал работу ЛЮБОЙ си-прогаммы которых много. Но в топике мы говорим о твоей
проблеме. О проблеме перформанса. Я здесь пока проблемы не вижу.

Я очень не люблю и не хочу фантазировать (фантазия у меня богатая) за топик стартера. И я все-таки
настаиваю чтобы ты обрисовал где мы блочимся. Если это malloc/free - то почему. Дро...им память.
Может там одна и та-же строка миллиард раз аллоцируется? Почему мы это не видели? Может
очень длинная строка? почему на прикланом уровне мы такое допустили? Зачем она нужна
такая длинная в твоём Реал-тайм приложении.

Так вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс. Если мы по окну GUI двинули мышкой и посыпался целый поток событий о движении мыши - на каждое событие блокировка мьютекса. И если какой-то рабочий поток тоже обратится к динамической памяти - то его тормознут (заблокируют). Или ему повезёт и он заблокирует раньше, тогда гуд.

При этом у нас нет инверсии приоритетов . Поэтому операции с данными на стеке, например, на порядок быстрее чем операции в куче.

PS: Длинна строки как раз на это не влияет. Ну если мы не привели приложение к свопу из-за этой строки. Но это уже другая история.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897230
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravДело в том что структура динамической памяти - это по сути Синглетон.

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

Это не имеет никакого значения. Просто одна из форм оптимизации. Память выделенная на одном ядре может быть освобождена на другом ядре. И это снова синглетон. Только ещё проблем добавляется. Теперь нужно как-то увязать указатель и пул памяти привязанный к ядру. Таких фокусов было полно в истории. При этом при проектировании ПО - откуда я знаю сколько ядер будет на процессоре? Сколько ядер выделит мне ОС в данный момент времени? Это всё проблемы...
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897232
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravТак вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем
мьютекс. Если мы по окну GUI двинули мышкой и посыпался целый поток событий о движении
мыши - на каждое событие блокировка мьютекса. И если какой-то рабочий поток тоже обратится
к динамической памяти - то его тормознут (заблокируют).

"Ой, ё-ё-ё-ё..." (с)

Я понимаю блокировку одного пула на время выделения. Но откуда у тебя блокировка на поток
событий-то? Даже если сообщения выделяются динамически, у них совершенно отдельный пул
памяти. Отдельный как других потоков, так и от кучи приложения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Так вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс.

Тут наверное зависит от ОС и от реализации. Расскажи свою конфигурацию.
Я знаю что топик начался с MSVC+GCC. Но было-бы полезно узнать детали.

petrav

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

А вот это какая-то уже ерунда. Так не должно быть. Давай-ко детализируем.
Почему оно на каждый mouse move чото блокирует.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897234
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravИ это снова синглетон.

Ты всерьёз веришь, что мутекс это такая тяжёлая штука, что их нельзя выделить 100500 и все
стоят в очереди за одним-единственным?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897238
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Я понимаю блокировку одного пула на время выделения. Но откуда у тебя блокировка на поток
событий-то? Даже если сообщения выделяются динамически, у них совершенно отдельный пул
памяти. Отдельный как других потоков, так и от кучи приложения.

Ну хорошо. Возвращаемся к Qt. Докажи, что у событий Qt отдельный пул-памяти? Может и есть. boost::pool (если не ошибаюсь) один из вариантов оптимизации. Можно на WinAPI отдельную кучу создать. Но... я сомневаюсь что это так. Точнее уверен что это не так.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897239
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravВозвращаемся к Qt. Докажи, что у событий Qt отдельный пул-памяти?

Нет. Ни за что. Мы не будем возвращаться к одному из самых кривых и тормозных фреймворков.
Вы уж как-нибудь сами с ним живите.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897240
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravИ это снова синглетон.

Ты всерьёз веришь, что мутекс это такая тяжёлая штука, что их нельзя выделить 100500 и все
стоят в очереди за одним-единственным?

Так это как раз и зависит то он задачи. Если тебе нужно выжать максимально качественное мягкое реальное время из компа, то это одно. Если на Повер Поинт мултик показать, то другое. Можно конечно на всё забить, можно много чего сделать.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897242
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Просто одна из форм оптимизации.

Закон программиста - "Преждевременная оптимизация - зло".
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897243
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

Так вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс.

Тут наверное зависит от ОС и от реализации. Расскажи свою конфигурацию.
Я знаю что топик начался с MSVC+GCC. Но было-бы полезно узнать детали.

petrav

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

А вот это какая-то уже ерунда. Так не должно быть. Давай-ко детализируем.
Почему оно на каждый mouse move чото блокирует.

MSVC + Qt.

Да нет никакого mouse move, потоков GUI или ещё какие-то потоки, ты пойми. Ничего этого нет. Есть просто отвлечённые потоки которые лезут в синглетон и блокируют друг друга. И всё.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897244
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Так это как раз и зависит то он задачи.
в строках проблем 100% не будет)))
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897246
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Есть просто отвлечённые потоки которые лезут в синглетон и блокируют друг друга. И всё.
увы. И синглетона нет. Даже отвлеченного. Можешь злится.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897248
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

Тут наверное зависит от ОС и от реализации. Расскажи свою конфигурацию.
Я знаю что топик начался с MSVC+GCC. Но было-бы полезно узнать детали.

пропущено...

А вот это какая-то уже ерунда. Так не должно быть. Давай-ко детализируем.
Почему оно на каждый mouse move чото блокирует.

MSVC + Qt.

Да нет никакого mouse move, потоков GUI или ещё какие-то потоки, ты пойми. Ничего этого нет. Есть просто отвлечённые потоки которые лезут в синглетон и блокируют друг друга. И всё.

Ну хорошо. Пускай. Но ты можешь запустить профилировщик. И посмотреть по стеку за 1 шаг до того
как зайти в синглтон какой прикладной код за этим стоит? Что он делает? Зачем он так много
и так часто лезет в синглтон?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897250
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Дружище petrav. Я по прежнему не понимаю где там они чего будут блокировать.
Давай всё таки сделаем синтетический тест и посмотрим на него.

Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю.
всё пучком, расходимся
современные менеджеры памяти за исключением специфических не используют явных блокировок и уж тем более семафоров, практически все уже lock-free - там уже больше всё в сброс кеша процессора упирается

по факту 40 млн. выделений сбросов/сек на i7 в жёсткой конкуренции

больше выдают только сильно специфические, вроде хаотических - но там свои приколы
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897251
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
petrav
пропущено...

Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю.
всё пучком, расходимся
современные менеджеры памяти за исключением специфических не используют явных блокировок и уж тем более семафоров, практически все уже lock-free - там уже больше всё в сброс кеша процессора упирается

по факту 40 млн. выделений сбросов/сек на i7 в жёсткой конкуренции

больше выдают только сильно специфические, вроде хаотических - но там свои приколы

Автор говорит у него - слабое железо. Ну там не i7 скорее всего.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39897253
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Ну хорошо. Пускай. Но ты можешь запустить профилировщик. И посмотреть по стеку за 1 шаг до того
как зайти в синглтон какой прикладной код за этим стоит? Что он делает? Зачем он так много
и так часто лезет в синглтон?

У меня ничего и никуда часто не лезет Мы рассуждаем о вопроса производительности. И да это не похоже на разработку web-серверов на Шарпе где просто докупают ещё один сервер в стойку, хотя и там всё сложно.
...
Рейтинг: 0 / 0
25 сообщений из 409, страница 15 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / MSVC и GCC: совместимость кодировок исходников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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