|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravМы рассуждаем о вопроса производительности. "Давайте спорить о вкусе устриц. До хрипоты." (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:21 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Автор говорит у него - слабое железо. Ну там не i7 скорее всего. ибо там особо ещё нет таких сильных проблем со сбросом кеша ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:23 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
kealon(Ruslan) petrav пропущено... Синтетического теста у меня нет. Но давай представим себе, что мы с тобой реализуем Си-рантайм и функции malloc/free. Очевидно нам потребуется некоторая структура данных, которая хранит (так или иначе) список свободных и занятых участков памяти? Или нет? При этом нужно учесть, что блок памяти выделенный в одном потоке может быть освобождён в другом потоке. Как разные потоки будут одновременно обращаться с этой структурой? Я буду рад если что-то не понимаю. современные менеджеры памяти за исключением специфических не используют явных блокировок и уж тем более семафоров, практически все уже lock-free - там уже больше всё в сброс кеша процессора упирается по факту 40 млн. выделений сбросов/сек на i7 в жёсткой конкуренции больше выдают только сильно специфические, вроде хаотических - но там свои приколы И как же это работает? Ну просто теоретически, как реализовать менеджер памяти в lock-free стиле? Менеджер памяти реализован на уровне процессора? В последний раз с помощью Interlocked (lock-free) функций из Windows API получалось только стек 32-х битных значений реализовать, но список уже не получалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:24 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton, Пора спорить на коньяк что нет у ТС этой проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:26 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton Ну хорошо. Пускай. Но ты можешь запустить профилировщик. И посмотреть по стеку за 1 шаг до того как зайти в синглтон какой прикладной код за этим стоит? Что он делает? Зачем он так много и так часто лезет в синглтон? У меня ничего и никуда часто не лезет Мы рассуждаем о вопроса производительности. И да это не похоже на разработку web-серверов на Шарпе где просто докупают ещё один сервер в стойку, хотя и там всё сложно. Мы ходим по кругу. Идет 16-я страница а ты всё-таки не был убедителен в том что была проблема memory manager. Я с удовольстием на нее навалился-бы. Но мне валится пока некуда. Если я сам буду писать синтетические бенчмарки которые выделяют и убивают строки - это будет какая-то шизофрения. Ты согласен? Тем более что я - убежден что обще-системные библиотеки зачастую лучше чем мы о них думаем. И анализ производительности измерительными штуками обычно показывает что мы их просто не так используем. А это уже - вопрос к прикладному коду. Вобщем я убежден что у тебя есть проблема в прикладном коде. Не в строках и не в мемори менеджерах. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:29 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
по-моему последние 15 страниц мы обсуждаем сферического коня в комнате, где его нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:30 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravНу просто теоретически, как реализовать менеджер памяти в lock-free стиле? Дерево свободных блоков для минимизации времени нахождения в критическом коде и спинлоки, например. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:35 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Мы ходим по кругу. Идет 16-я страница а ты всё-таки не был убедителен в том что была проблема memory manager. Я не предлагаю тебе решать мои проблемы и наваливаться на них. В участках кода критичных к производительности я просто стараюсь не обращаться к динамической памяти, не использовать потенциально тяжёлых модулей типа std::stringstream, boost::fomat или boost::stringalgo. Вот в потоке GUI это позволительно. Стараюсь что бы рабочие потоки как можно меньше блокировались на мьютексах с потоком GUI. У меня нет проблем с реализацией мягкого реального времени даже на слабых компах. Судя по отчётам. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:36 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav И как же это работает? Ну просто теоретически, как реализовать менеджер памяти в lock-free стиле? Менеджер памяти реализован на уровне процессора? В последний раз с помощью Interlocked (lock-free) функций из Windows API получалось только стек 32-х битных значений реализовать, но список уже не получалось. для реализации менеджера памяти не обязательно реализовывать такие высокоуровневые конструкции как стек и список хаотические, например, вообще не заморачиваются, берут номер операции процессора, далают от него хэш и по нему пытаются сбить бит занятости блока в линейном массиве: получилось - блок выделен, нет - ещё попытка. При неполной банке это очень быстро. Но это конечно вольный пересказ, а не руководство к действию, в реальности всё конечно покрыто определёнными техническими трудностями и ньюансами. ИМХО вообще не стоит по этому поводу заморачиваться, кроме образовательных целей, если вы не пишете что-то очень высокого класса. Лучше стандартных врят ли получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:37 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Несколько мыслей. Я один раз чисто случайно читая Stackoverflow наткнулся на закрытый топик. Его закрыл модератор стековера. Но больше меня поразила резолюция. Там было по английски написано. - "Ваш вопрос не имеет прикладного смысла. Постарайтесь пересмотреть ваше задание." - автор-же в топике просто в цикле что-то там икрементировал или декрементировал. Вобщем был озабочен какими-то атомик-бенчмарками и по ним спрашивал. Я давно знал что модеры стековера очень суровы и решительны. И мне сама по себе идея понравилась. Идея обоснования многих бенчмарков. Еще мысль. Давно во времена моей производтвенной практики в *телекомах мой начальник (большой алкоголик и любитель пошлых анекдотов) устав слушать мои рац-предложения сказал мне - "Знаешь. У каждой вещи есть своё предназначение. У жопы - предназначение - делать дефекацию. Или срать. Хотя есть некоторые мужчины которые ищут у чужой жопы другой смысл." Вобщем у менеджера памяти (MM) есть своё предназначение. Но нам не стоит искать или ждать от него (MM) чего-то другого. Я сильно сомневаюсь что от MM (Linux or Windows) мы выдавим 40 млн транзакций на выделене (и освобождение). Ведь. задача стоит более широко. Там еще и идет логика процессинга строк. Физическое копирование. Реаллокация (на расширение). Вобщем если мы будем DDOS-ить ММ строками то мы будем глупцы. Надо искать решение прикладное. А системное - уж как нибудь поправят те кто этим занимается давно и профессионально. Контрибуторы Linux e.t.c. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 19:55 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Вобщем если мы будем DDOS-ить ММ строками то мы будем глупцы. Надо искать решение прикладное. А системное - уж как нибудь поправят те кто этим занимается давно и профессионально. Контрибуторы Linux e.t.c. Допустим мы на Qt (LOL) пишем высоконагруженный сервер. Вызов QString::normalized() на каждый запрос от клиента будет обращаться к динамической памяти. Как же ты собрался не ДДОС-ить Менеджер Памяти? Да любой высокоуровневый язык программирования тут начнёт ДДОС-ить и ты даже не догадаешься где. Тогда тебе сервер нужно на Си переписывать. Неожиданные от тебя аргументы пошли. :) Тебе нужно говорить по другому: будет тормозить, расширим кластер ещё на один сервер, который арендуем у провайдера. И это будет правильно, если ваш бизнес приносит деньги и удовлетворяет заказчиков. А ДДОС - да что там такое. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 20:27 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav пишем высоконагруженный сервер. Вау. 16 страниц в мусорку. Начинай по новой. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 20:33 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Вобщем если мы будем DDOS-ить ММ строками то мы будем глупцы. Надо искать решение прикладное. А системное - уж как нибудь поправят те кто этим занимается давно и профессионально. Контрибуторы Linux e.t.c. Я не очень помню архитектуру веб-серверов. Но насколько помню дело так обстоит: - Приходит допустим GET запрос от пользователя. - Из пула потоков берётся свободный поток и данные передаются ему на обработку. - На сервере есть пул объектов подключения к БД. Но вот есть ли связанный с каждым потоком ещё и пул строк? И как он вообще мог бы быть реализован, вот интересно. Какая у строк будет длина? Если такого пула нет - то каждый запрос многократное обращение к динамической памяти. А что со всем другими типами и объектами? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 20:45 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton Вобщем если мы будем DDOS-ить ММ строками то мы будем глупцы. Надо искать решение прикладное. А системное - уж как нибудь поправят те кто этим занимается давно и профессионально. Контрибуторы Linux e.t.c. Допустим мы на Qt (LOL) пишем высоконагруженный сервер. Вызов QString::normalized() на каждый запрос от клиента будет обращаться к динамической памяти. Как же ты собрался не ДДОС-ить Менеджер Памяти? Да любой высокоуровневый язык программирования тут начнёт ДДОС-ить и ты даже не догадаешься где. Тогда тебе сервер нужно на Си переписывать. Неожиданные от тебя аргументы пошли. :) Тебе нужно говорить по другому: будет тормозить, расширим кластер ещё на один сервер, который арендуем у провайдера. И это будет правильно, если ваш бизнес приносит деньги и удовлетворяет заказчиков. А ДДОС - да что там такое. Ну смотри. Во первых. Надо быть хитрее. Тебе не надо выделять память для строк которые НЕ-требуют нормализации. Требует она или нет - можно проверить. Я опять-же привлекаю в топик для консультации Питон (прошу прощения). https://docs.python.org/3/library/unicodedata.html Код: python 1. 2. 3. 4. 5.
Смело добавляй его в конструктор. И если строка нормализована то - ничего делать не надо. Тоесть ее поведение будет такое-же как и раньше. Тоесть как работали так и работаем. Вангую что by use-case таких волшебных комбинаций символов будет очень мало. Нижнаяя часть ASCII-кириллица их почти нет. Я вот с трудом нагуглил вообще эти примеры. К сожалению в моей сборке (Python3.6.9.+unicodedata2) этот метод еще не реализован. Надо обновлятся. Но я думаю что такой предикат должен быть и в Qt, и в cpputf8. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 20:52 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravНо вот есть ли связанный с каждым потоком ещё и пул строк? Повторяю ещё раз, медленно: Линукс (GLIBC) на котором крутятся большинство уэб-серверов использует отдельные кучи для потоков. Пристрелите уже этот топик. Вместе с аффтаром. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 21:00 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Ну смотри. Во первых. Надо быть хитрее. Тебе не надо выделять память для строк которые НЕ-требуют нормализации. Требует она или нет - можно проверить. Идея хорошая. Но небольшая проблема. У тебя уже есть строка которая выделена на динамической памяти. Просто ты оптимизировал ещё одно выделение. ДДОС ММ никуда не делся. Но да, наверное это должно быть bestpractices по данной тематике. Тут смысл в бизнес процессах. Работая в определённой сфере ты вынужден использовать Java, C# или Питон ради быстрой разработки. Проблемы производительности решаются добавлением нового сервера в кластер. Ну приблизительно. Ты так привык и не задумываешься об этом. Но есть куча задач, где так не возможно... Динамическая память всегда была тяжёлой операцией, особенно в многопоточном окружении. И нельзя добавить сервер в кластер и реагировать нужно как можно быстрее. Это твой клиент ОнлайнСбербанка может подождать там 1-2 секунды. Есть вещи которые не ждут. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 21:15 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton Ну смотри. Во первых. Надо быть хитрее. Тебе не надо выделять память для строк которые НЕ-требуют нормализации. Требует она или нет - можно проверить. Идея хорошая. Но небольшая проблема. У тебя уже есть строка которая выделена на динамической памяти. Просто ты оптимизировал ещё одно выделение. ДДОС ММ никуда не делся. Но да, наверное это должно быть bestpractices по данной тематике. Тут смысл в бизнес процессах. Работая в определённой сфере ты вынужден использовать Java, C# или Питон ради быстрой разработки. Проблемы производительности решаются добавлением нового сервера в кластер. Ну приблизительно. Ты так привык и не задумываешься об этом. Но есть куча задач, где так не возможно... Динамическая память всегда была тяжёлой операцией, особенно в многопоточном окружении. И нельзя добавить сервер в кластер и реагировать нужно как можно быстрее. Это твой клиент ОнлайнСбербанка может подождать там 1-2 секунды. Есть вещи которые не ждут. Давай еще один инженерный вопрос. Каким образом эта строка у тебя появилась в системе? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 21:28 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Давай еще один инженерный вопрос. Каким образом эта строка у тебя появилась в системе? Допустим она пришла через GET запрос. Я как бы уже очень много лет не работаю в web, так что... :) При этом, мы заранее не знаем какие именно параметры нам придут. Параметры мы получаем через коллекцию строк. Допустим пришёл "productName" и по логике это имя товара, который наш клиент уже покупал. Так же из БД мы подгрузили имя производителя, адрес доставки, имя курьера и хотим сделать отчёт. При этом такой товар клиент мог покупать многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 21:49 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Допустим она пришла через GET запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 21:54 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
У вас - винда. И вы работаете с вебом через http. А какая библиотечка там стоит? Возможно Windows Sockets API? Или поверх нее там еще какая-то механика стоит наподобие HttpClient. Я почему все это спрашиваю. Стек - не такой уж короткий. Строки путешествуют по уровням этой модели. И у нас - много точек где можно применить оптимизации и трансформации. Возможен такой вариант что вопрос кодировок решается на HttpServer. Например когда клиент коннектится он шлёт атрибут Accept-Charset где он сообщает серверу что он ПРИНИМАЕТ ответы в такой-то кодировке. https://developer.mozilla.org/ru/docs/Web/HTTP/Заголовки/Accept-Charset ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 21:59 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav , Дело ваше, слушать или нет. Но в десктопе, веб и 3D визуализации совершенно разные архитектуры и методы программирования. Если прыгаете с одного на другое как школьник, это идиотизм. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 22:25 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton У вас - винда. И вы работаете с вебом через http. А какая библиотечка там стоит? Возможно Windows Sockets API? Или поверх нее там еще какая-то механика стоит наподобие HttpClient. Мы обсуждаем сервер. mayton Я почему все это спрашиваю. Стек - не такой уж короткий. Строки путешествуют по уровням этой модели. И у нас - много точек где можно применить оптимизации и трансформации. Да можно то можно. Только я с трудом себе представляю как ты гарантируешь какой-нибудь StringMap (условное название) из Java что бы он на стеке был? Это даже для C++ странная задача. Кстати интересная тема: Dynamic Lock-free memory allocators . Плохо с английским. :( Где-то на половину понял. Но что-то мне подсказывает, что там проблем ещё больше чем я думал. Нужно углубляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 23:16 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravМы обсуждаем сервер. Внезапно. А ведь ещё недавно это был "офисный софт". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 23:19 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav mayton У вас - винда. И вы работаете с вебом через http. А какая библиотечка там стоит? Возможно Windows Sockets API? Или поверх нее там еще какая-то механика стоит наподобие HttpClient. Мы обсуждаем сервер. Ну это просто прекрасно. Значит у тебя есть приложение в котором есть UI и есть некая серверная часть. Типа HttpServer. И всё это крутится в одном Windows-process. Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 23:20 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Да можно то можно. Только я с трудом себе представляю как ты гарантируешь какой-нибудь StringMap (условное название) из Java что бы он на стеке был? Это даже для C++ странная задача. Я говорю о стеке технологий. И на каждом уровне этого стека строка имеет место. Где-то она - сырая. Порезанная в виде кусочков лежит тихо себе в буферах сокета. Потом она - попадает на Handler Get запроса. Там она уже будет лежать в прикладной кодировке. В соответствии с правилами HTTP протокола и твоего приложения. Тут можно загибать пальцы потому-что транформация строки уже началась. Далее ты хочешь с ней сделать еще одну транформацию. Нормализовать комбинации utf-8 символов. Мой поинт в том чтобы сократить это количество фаз и свести их просто к алгоритму который делает чуть больше действий. На память это особо не повлияет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 23:27 |
|
|
start [/forum/topic.php?fid=57&msg=39897258&tid=2017506]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 144ms |
0 / 0 |