|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Пожимая плечами Хорошо. Давайте синтетический тест. C двумя потоками и со строками. Посмотрим на него. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:14 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton И я очень удивлён тем что ты нашел (!) реально нашел проблему аллокации строк на СТЫКЕ UI и динамической памяти. Нет никакого стыка UI и динамической памяти. Есть N-потоков которые обращаются к структуре динамической памяти. Одновременно. Если ты покажешь, что такие алгоритмы не блокируют друг друга, я скажу тебе большое спасибо. mayton Ты вот думаешь что для comparison двух utf-8 строк тебе надо обязательно ре-аллоцировать (malloc/realloc) память? А я вот так не думаю. Я так не думаю. Агоритмически я считаю, что их можно сравнить без аллокации памяти. Но так следует из интерфейса Qt - что бы сравнить строки на Qt их нужно нормализовать, а что бы нормализовать нужно обратиться к динамической памяти: Код: plaintext 1.
Плиз, обрати внимание на слово const в конце сигнатуры. И на возвращаемый тип. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:16 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton И я очень удивлён тем что ты нашел (!) реально нашел проблему аллокации строк на СТЫКЕ UI и динамической памяти. Нет никакого стыка UI и динамической памяти. Есть N-потоков которые обращаются к структуре динамической памяти. Одновременно. Если ты покажешь, что такие алгоритмы не блокируют друг друга, я скажу тебе большое спасибо. Дружище petrav. Я по прежнему не понимаю где там они чего будут блокировать. Давай всё таки сделаем синтетический тест и посмотрим на него. Предлагаю также подумать о хеш-коде нормализованной строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:22 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Дружище petrav. Я по прежнему не понимаю где там они чего будут блокировать. Давай всё таки сделаем синтетический тест и посмотрим на него. Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:29 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Еще один вариант испанского мальчика жрущего креветок. Код: python 1.
Хотя я нормализацию не заказывал. На печати в консоли выглядит так. 'El nío come camarön' Код: python 1. 2.
И длина - 21 символ с точки зрения строкового API После нормализации. Код: python 1.
'El nío come camarön' Код: python 1.
19 Не знаю как будет видно сырую строку после публикации. Но моя bash консоль вполне себе нормально отображает эти 2 символа с диакритикой с явной нормализацией и без. И среда разработки тоже если скопировать. Но чисто визуально я вижу различия после normalize. Символ слегка изменен. Хотя суть наверное та-же. самое время посмотреть на работу регекспов, сабстрингов и прочих требовательных ф-й ну они то конечно же в питоне подогнаны под эти костыли, но какой ценой... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:32 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Petrav Ты сейчас просто описал работу ЛЮБОЙ си-прогаммы которых много. Но в топике мы говорим о твоей проблеме. О проблеме перформанса. Я здесь пока проблемы не вижу. Я очень не люблю и не хочу фантазировать (фантазия у меня богатая) за топик стартера. И я все-таки настаиваю чтобы ты обрисовал где мы блочимся. Если это malloc/free - то почему. Дро...им память. Может там одна и та-же строка миллиард раз аллоцируется? Почему мы это не видели? Может очень длинная строка? почему на прикланом уровне мы такое допустили? Зачем она нужна такая длинная в твоём Реал-тайм приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:35 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух mayton Еще один вариант испанского мальчика жрущего креветок. Код: python 1.
Хотя я нормализацию не заказывал. На печати в консоли выглядит так. 'El nío come camarön' Код: python 1. 2.
И длина - 21 символ с точки зрения строкового API После нормализации. Код: python 1.
'El nío come camarön' Код: python 1.
19 Не знаю как будет видно сырую строку после публикации. Но моя bash консоль вполне себе нормально отображает эти 2 символа с диакритикой с явной нормализацией и без. И среда разработки тоже если скопировать. Но чисто визуально я вижу различия после normalize. Символ слегка изменен. Хотя суть наверное та-же. самое время посмотреть на работу регекспов, сабстрингов и прочих требовательных ф-й ну они то конечно же в питоне подогнаны под эти костыли, но какой ценой... Вот откуда взялся этот мальчик. https://www.w3resource.com/python/python-bytes.php Я там кстати ошибку допустил. Во втором слове не 3 а 4 символа должно быть. И этот мой тест надо еще раз перетестить. А по поводу регулярок. Я думаю что под капотом у питона обычная С-библиотека. Просто меня интересовали best-practices и подходы в отношении мульти-национальным строкам и кодировкам в разных языка. А змей удобен для быстрого прототипирования. Написал в REPL консоли - и получил ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:39 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav, Боюсь, ты и 500 строк создания не приведешь в ГУИ. Так как даже при отрисовке Война и мир там стоит Canvas.DrawText() ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:41 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravДело в том что структура динамической памяти - это по сути Синглетон. Спешу тебя огорчить: это уже давно не так. Общая куча делится на пулы по числу ядер, которые работают независимо. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:44 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Ты сейчас просто описал работу ЛЮБОЙ си-прогаммы которых много. Но в топике мы говорим о твоей проблеме. О проблеме перформанса. Я здесь пока проблемы не вижу. Я очень не люблю и не хочу фантазировать (фантазия у меня богатая) за топик стартера. И я все-таки настаиваю чтобы ты обрисовал где мы блочимся. Если это malloc/free - то почему. Дро...им память. Может там одна и та-же строка миллиард раз аллоцируется? Почему мы это не видели? Может очень длинная строка? почему на прикланом уровне мы такое допустили? Зачем она нужна такая длинная в твоём Реал-тайм приложении. Так вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс. Если мы по окну GUI двинули мышкой и посыпался целый поток событий о движении мыши - на каждое событие блокировка мьютекса. И если какой-то рабочий поток тоже обратится к динамической памяти - то его тормознут (заблокируют). Или ему повезёт и он заблокирует раньше, тогда гуд. При этом у нас нет инверсии приоритетов . Поэтому операции с данными на стеке, например, на порядок быстрее чем операции в куче. PS: Длинна строки как раз на это не влияет. Ну если мы не привели приложение к свопу из-за этой строки. Но это уже другая история. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:45 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravДело в том что структура динамической памяти - это по сути Синглетон. Спешу тебя огорчить: это уже давно не так. Общая куча делится на пулы по числу ядер, которые работают независимо. Это не имеет никакого значения. Просто одна из форм оптимизации. Память выделенная на одном ядре может быть освобождена на другом ядре. И это снова синглетон. Только ещё проблем добавляется. Теперь нужно как-то увязать указатель и пул памяти привязанный к ядру. Таких фокусов было полно в истории. При этом при проектировании ПО - откуда я знаю сколько ядер будет на процессоре? Сколько ядер выделит мне ОС в данный момент времени? Это всё проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:50 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravТак вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс. Если мы по окну GUI двинули мышкой и посыпался целый поток событий о движении мыши - на каждое событие блокировка мьютекса. И если какой-то рабочий поток тоже обратится к динамической памяти - то его тормознут (заблокируют). "Ой, ё-ё-ё-ё..." (с) Я понимаю блокировку одного пула на время выделения. Но откуда у тебя блокировка на поток событий-то? Даже если сообщения выделяются динамически, у них совершенно отдельный пул памяти. Отдельный как других потоков, так и от кучи приложения. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:51 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Так вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс. Тут наверное зависит от ОС и от реализации. Расскажи свою конфигурацию. Я знаю что топик начался с MSVC+GCC. Но было-бы полезно узнать детали. petrav Если мы по окну GUI двинули мышкой и посыпался целый поток событий о движении мыши - на каждое событие блокировка мьютекса. А вот это какая-то уже ерунда. Так не должно быть. Давай-ко детализируем. Почему оно на каждый mouse move чото блокирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:52 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravИ это снова синглетон. Ты всерьёз веришь, что мутекс это такая тяжёлая штука, что их нельзя выделить 100500 и все стоят в очереди за одним-единственным? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:53 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Я понимаю блокировку одного пула на время выделения. Но откуда у тебя блокировка на поток событий-то? Даже если сообщения выделяются динамически, у них совершенно отдельный пул памяти. Отдельный как других потоков, так и от кучи приложения. Ну хорошо. Возвращаемся к Qt. Докажи, что у событий Qt отдельный пул-памяти? Может и есть. boost::pool (если не ошибаюсь) один из вариантов оптимизации. Можно на WinAPI отдельную кучу создать. Но... я сомневаюсь что это так. Точнее уверен что это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:00 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravВозвращаемся к Qt. Докажи, что у событий Qt отдельный пул-памяти? Нет. Ни за что. Мы не будем возвращаться к одному из самых кривых и тормозных фреймворков. Вы уж как-нибудь сами с ним живите. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:03 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravИ это снова синглетон. Ты всерьёз веришь, что мутекс это такая тяжёлая штука, что их нельзя выделить 100500 и все стоят в очереди за одним-единственным? Так это как раз и зависит то он задачи. Если тебе нужно выжать максимально качественное мягкое реальное время из компа, то это одно. Если на Повер Поинт мултик показать, то другое. Можно конечно на всё забить, можно много чего сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:03 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Просто одна из форм оптимизации. Закон программиста - "Преждевременная оптимизация - зло". ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:06 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton petrav Так вот, когда мы из разных потоков обращаемся к new/delete/malloc/free - мы блокируем мьютекс. Тут наверное зависит от ОС и от реализации. Расскажи свою конфигурацию. Я знаю что топик начался с MSVC+GCC. Но было-бы полезно узнать детали. petrav Если мы по окну GUI двинули мышкой и посыпался целый поток событий о движении мыши - на каждое событие блокировка мьютекса. А вот это какая-то уже ерунда. Так не должно быть. Давай-ко детализируем. Почему оно на каждый mouse move чото блокирует. MSVC + Qt. Да нет никакого mouse move, потоков GUI или ещё какие-то потоки, ты пойми. Ничего этого нет. Есть просто отвлечённые потоки которые лезут в синглетон и блокируют друг друга. И всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:07 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Так это как раз и зависит то он задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:07 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Есть просто отвлечённые потоки которые лезут в синглетон и блокируют друг друга. И всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:08 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Тут наверное зависит от ОС и от реализации. Расскажи свою конфигурацию. Я знаю что топик начался с MSVC+GCC. Но было-бы полезно узнать детали. пропущено... А вот это какая-то уже ерунда. Так не должно быть. Давай-ко детализируем. Почему оно на каждый mouse move чото блокирует. MSVC + Qt. Да нет никакого mouse move, потоков GUI или ещё какие-то потоки, ты пойми. Ничего этого нет. Есть просто отвлечённые потоки которые лезут в синглетон и блокируют друг друга. И всё. Ну хорошо. Пускай. Но ты можешь запустить профилировщик. И посмотреть по стеку за 1 шаг до того как зайти в синглтон какой прикладной код за этим стоит? Что он делает? Зачем он так много и так часто лезет в синглтон? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:09 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton Дружище petrav. Я по прежнему не понимаю где там они чего будут блокировать. Давай всё таки сделаем синтетический тест и посмотрим на него. Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю. современные менеджеры памяти за исключением специфических не используют явных блокировок и уж тем более семафоров, практически все уже lock-free - там уже больше всё в сброс кеша процессора упирается по факту 40 млн. выделений сбросов/сек на i7 в жёсткой конкуренции больше выдают только сильно специфические, вроде хаотических - но там свои приколы ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:12 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
kealon(Ruslan) petrav пропущено... Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю. современные менеджеры памяти за исключением специфических не используют явных блокировок и уж тем более семафоров, практически все уже lock-free - там уже больше всё в сброс кеша процессора упирается по факту 40 млн. выделений сбросов/сек на i7 в жёсткой конкуренции больше выдают только сильно специфические, вроде хаотических - но там свои приколы Автор говорит у него - слабое железо. Ну там не i7 скорее всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:15 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Ну хорошо. Пускай. Но ты можешь запустить профилировщик. И посмотреть по стеку за 1 шаг до того как зайти в синглтон какой прикладной код за этим стоит? Что он делает? Зачем он так много и так часто лезет в синглтон? У меня ничего и никуда часто не лезет Мы рассуждаем о вопроса производительности. И да это не похоже на разработку web-серверов на Шарпе где просто докупают ещё один сервер в стойку, хотя и там всё сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:18 |
|
|
start [/forum/topic.php?fid=57&msg=39897239&tid=2017506]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 148ms |
0 / 0 |