170 похожих чатов

У вас правда приложение проводит десятки процентов процессорного времени в

malloc?

33 ответов

30 просмотров

что значит десятки. у меня вот сервер опроса по модбасу на Qt проводит в malloc 86% ибо на каждый запрос создается свой reply (привет Qt) вы скажите ну возьмите напишите свой сервер + напишите пулл обьектов для reply... вообще кто придумал эти фреймворки... надо же все самим писать.

Stas Koynov
что значит десятки. у меня вот сервер опроса по мо...

А платформа какая и железо? Мне просто интересно

Alexander "SonnySlave" Zaitsev
ух жесть то какая

ну самое забавное, что выделяем то детские 256 байт для модбас пакета. + qObject делает второе выделение для своего pimpl. просто работа сервера опрос девайсов, и генерация событий для АРМ оператора. получается опросили, сложили регистры в общую карту, проверили по маске если что-то стоит, сообщяем оператору. повторяем цикл. получаем что больше всего торчим в выделении памяти для reply

****
А платформа какая и железо? Мне просто интересно

серверная убунту. ну железо разное, в основном промышленный ПК боксер. если АРМ совмещен с сервером, то всякие iRobo или китайский аналог. но туда уже стявят линух с GUI скажем кубунту в последний раз ставили.

Stas Koynov
что значит десятки. у меня вот сервер опроса по мо...

для начала - зачем создавать QObject на каждый запрос?

Андрей Руссков
для начала - зачем создавать QObject на каждый зап...

ну что значит зачем. reply явл-ся КОбжект! потом не я же его создаю. мне его клиент возвращает при запросе. Почему нельзя переиспользовать reply? ну это вы у авторов Qt спросите. новый запрос - новый reply.

Stas Koynov
ну самое забавное, что выделяем то детские 256 бай...

Можно попробовать подключить кастомный алокатор и переопределить new только для объекта reply. Как тут https://www.qt.io/blog/a-fast-and-thread-safe-pool-allocator-for-qt-part-1

Stas Koynov
что значит десятки. у меня вот сервер опроса по мо...

Ну Qt это считай Java, там производительностью никогда не пахло

Stas Koynov
ну самое забавное, что выделяем то детские 256 бай...

У вас просто такой сценарий использования что возможно лучше не использовать qt для модбаса. Оно же слабо предназначено для опроса большого количества устройств

Kirill Bolshakov
Ну Qt это считай Java, там производительностью ник...

Это.... Говори за себя пожалуйста. Все там ок с производительностью

Kirill Bolshakov
Ну Qt это считай Java, там производительностью ник...

"Qt считай Java" ну тут разговор можно даже не начинать

Kirill Bolshakov
Ну Qt это считай Java, там производительностью ник...

Qt сильно не кэш френдли если абсолютно всё в системе не на Qt и не одной версии (очень скучаю по смартфонам Nokia Series S60, где как раз так было), это да, тоже не люблю Qt из-за этого, но это далеко не Java или C# где неотключаемый сборщик мусора и огромный рантайм с бесконечными пересборками всего на лету, которые убивают мобильность (батарею) и порой создают лаги в неподходящий момент

Elle (Элль) Solomina (Соломина)
Qt сильно не кэш френдли если абсолютно всё в сист...

А что, все так вот должны прям совсем быть cache friendly ?

Ilya Zviagin
А что, все так вот должны прям совсем быть cache f...

при прочих равных - да, было бы очень неплохо

Alexander "SonnySlave" Zaitsev
при прочих равных - да, было бы очень неплохо

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

Ilya Zviagin
Кэш имеет только одну стратегию, вовсе не факт, чт...

можно привести около-реальные примеры, где cache-friendly библиотека будет только вредить для перфа?

Alexander "SonnySlave" Zaitsev
при прочих равных - да, было бы очень неплохо

Ну и далее постановка вопроса неверная. Не приложение для кэша, а кэш для приложения.

Ilya Zviagin
Ну и далее постановка вопроса неверная. Не приложе...

так никто и не собирается переписывать приложение. тут всего лишь запрос к библиотеке быть cache friendly, если она таковой может быть

Dmitriy [Отпуск]
Спасибо, классная опечатка))) cache, не cash...

В рамках облака это была бы не опечатка..

Ilya Zviagin
Это.... Говори за себя пожалуйста. Все там ок с пр...

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

Sergey Anisimov
А тот факт, что это реально кучи динамических алло...

Подумать только, мы динамически аллоцируем все подряд, референсим в родителей, динамически (ре)аллоцируя память в референс-контейнерах родителей таким образом. Можно даже картинку соответствующую вставить на тему "чтобы аллоцировать пока аллоцируешь".

Nikita Khomutov
Поэтому есть FastPimpl

В Qt не используется, насколько я знаю.

Nikita Khomutov
Поэтому есть FastPimpl

Но в Qt это не завезли, там pimpl выделяется в хипе

Anatoly Shirokov
Но в Qt это не завезли, там pimpl выделяется в хип...

Хип тоже уже довольно давно не так страшно, как было раньше

Denis P
Хип тоже уже довольно давно не так страшно, как бы...

Ну как сказать. Если верить вики dlmalloc появился где-то в 1987 году. С тех пор на сколько я знаю в ptmalloc добавили трэдлокал кеширование и ... это все изменения которые произошли. Ну еще некоторые эксплойты перекрыли. Кажется единственное что изменилось - это железо стало быстрее, благодаря чему gui можно писать как угодно. Если же забыть про не требовательные к перфу задачи вроде gui, паттерн доступа к памяти все еще играет важную роль.

magras
Ну как сказать. Если верить вики dlmalloc появился...

Речь о том, что за редким исключением на с++ даже если писать в стилистике шаред птры + всякие анордеред мапы, все равно будет быстро )

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта