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

И ещё вопрос из разряда "надежды на ответ мало, но

я все же спрошу"
Кто-нибудь использовал mORMot с Лазарусом под Линухом.
Справляется ли этот "Сурок" в Лазаре под Линухом с хорошей нагрузкой? Особенно с большими потоками бинарных данных?

Ну и вообще из разряда "таких не бывает".
А не сравнивал ли кто этого Cурка с gRPC, если ваять сразу на альтернативном .NET Core ?

87 ответов

184 просмотра

ПО первому пункту - была информация прям здесь. Типа на 2-3 месте среди ВСЕХ движков по производительности получился.

Автор mORMot создал новый менеджер памяти под fpc, под x64. Почти такой же шустрый как FastMM4, в разы лучше чем стандартный в fpc. Думаю, должно все летать.

L_and_L- Автор вопроса
Дмитрий Логинов
Автор mORMot создал новый менеджер памяти под fpc,...

Да, спасибо за инфу. Будем посмотреть... Стоит задача в создании сервера приложений в новом проекте. Но теперь он должен быть кроссплатформенный и по хорошему пройти будущую проверку на включение в ЕР ПО Собственно пока вижу два пути: Lazarus + mORMot либо .NET Core + gRPC И Delphi/FPC или C# знаем на очень хорошем уровне. Поэтому выбор с языком и средой тут не проблема. И там и там есть свои + и - Но хрен угадаешь на начальном этапе, кто потянет, а кто больше геморроя потом доставит 😉 по всем вопросам.

L_and_L
Да, спасибо за инфу. Будем посмотреть... Стоит зад...

Мы переписывали сервер с Delphi на C#, потому что Delphi сервер не мог загрузить все ядра\потоки, которые ему давали.

L_and_L- Автор вопроса
Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

А на Delphi при этом что использовалось в качестве серверных библиотек? Или все самописное поверх винсокетов?

L_and_L- Автор вопроса
L_and_L
Remoting SDK ?

Да. это https://www.remobjects.com И для Delphi и для C#

у нас даже синапс справляется с гигабитной сетью полностью забитой в обе стороны. мормот должен тем более

L_and_L
Да, спасибо за инфу. Будем посмотреть... Стоит зад...

Я пару месяцев назад пытался разобраться с mORMot. Сложилось ощущение, что ещё не дорос. Вспоминается, как мы работаем с fgx-native. Постоянно приходится Ярослава дёргать, т.к. нихрена ничего не понятно (хотя по видосам все очень красиво). Так и с mORMot видимо люди работают. Вроде и документация есть, а что с нею делать - непонятно.

Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

А с тестовой нагрузкой справляется? Или у вас задача максимально прогревать железо? Я это к тому, что не везде нужно паралелить и грузить ядра по максимуму, особенно в бизнес-задачах. Это скорее наоборот, признак плохого дизайна.

Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

угу. в результате сишарпы загрузили проц бесполезной нагрузкой 😂

Sergey Bodrov
А с тестовой нагрузкой справляется? Или у вас зада...

Нам нужно была полная утилизация мощности.

Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

Delphi конечно же может легко загрузить и 24 ядра, по опыту. главное что бы было во-первых чем, во-вторых что бы нагрузка была реально полезная, а не лишь бы работало

Handatros
угу. в результате сишарпы загрузили проц бесполезн...

Я не про пустую нагрузку, а про количество одновременно обрабатываемых подключений и количества запросов в секунду на них.

Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

Я про эту проблему достаточно подробно писать в статье https://github.com/loginov-dmitry/multithread/blob/master/multithread_net_programming.md

Handatros
.... неважно чем 😂

Я уде написал ниже.

L_and_L- Автор вопроса
Дмитрий Логинов
Я пару месяцев назад пытался разобраться с mORMot....

Да, признаться, та же фигня. Простыня там просто колоссальная. Еще мне не очень понравилось, что они явно склоняют к своим объектам на variant-ах НО все бы можно потерпеть, если это реально хороший вариант

Handatros
Delphi конечно же может легко загрузить и 24 ядра,...

Загрузить все процы можно на чём угодно. А вот сделать эффективно не факт. Многопоточное программирование очень сложная тема

Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

Статеечку подкинуть, где тестировали? Или сами погуглите, про DataSnap и прочих. Короткий вывод: DataSnap он же ClientDataset он же Midas писался так, чтобы людям с опытом dBase/Paradox было удобно и мозг не напрягать. Многопоточность как могли сделали. Получилось так себе. Тот же node.js сделанный вообще на основе Google Chrome сервер на основе datasnap заруливает на хрен. Кстати, он по памяти и шарпастый сервер тоже зарулил, хотя и не с разгромным счётом. Потом взяли либу mORMot, которая наоборот писалась от основ под максимум скорости и не пытаясь быть похожей на примеры из стопиццот учебников и FAQ, и после того как написало уже наоборот, дельфа всех размазала. Так что как и везде, вопрос так ли уж если на вам нужна скорость, или удобство поддержки. И если нужна - то нужно использовать соотв. структуры программы и библиотек.

L_and_L- Автор вопроса
Handatros
угу. в результате сишарпы загрузили проц бесполезн...

Напрасно вы. Даже по синтетическим тестам .NET Core как минимум не медленее дельфёвого кода. (ох, боюсь, что сейчас начнётся - как попы запылают) 😀😂 Но факт есть факт. Сам был в шоке еще лет 5 тому назад. Так что это во многом уже дело вкусовщины

Arioch The
Статеечку подкинуть, где тестировали? Или сами пог...

Не понял про что, но претензии были не к прослойки БД.

L_and_L
Напрасно вы. Даже по синтетическим тестам .NET Cor...

Так даже JS не медленнее. Давно известно, что 80% скорости - это "алгоритмы и структуры данных" и только потом начинаются уже ассемблерные вставки и прочее. Половину программ БД на Дельфи можно раза в два ускорить тупо проходя по всем цикла и убирая из них fieldByName и аналоги.

Евгений
Не понял про что, но претензии были не к прослойки...

Тогда читать стоило про Omni Thread Library (в привязке к дельфе) и про Erlang и вообще Actors Model Суть в том, что потоков должно быть ровно по числу ядер, а не числу запросов. Хотя типовый примеры с TThread предполагают обратное

L_and_L- Автор вопроса
Arioch The
Так даже JS не медленнее. Давно известно, что 80%...

Еще если тупо const для string-овых параметров в часто используемых процедурках проставить, то +/-10% к производительности запросто получить можно

Arioch The
Так даже JS не медленнее. Давно известно, что 80%...

Настоящая беда .NET и Java в сборке мусора, которая выскакивает неожиданно как чёрт из табакерки. Но это только если программер не позаботился о том чтобы вовремя занулить объект или вызывать сборщик мусора. В языках с ручным управлением паматью кривой программер получит по рукам очень быстро, а в Java и .NET он до поры до времени будет думать, что всё хорошо, ведь "за памятью не надо следить"

L_and_L
Напрасно вы. Даже по синтетическим тестам .NET Cor...

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

Евгений
Да. это https://www.remobjects.com И для Delphi и ...

Очень давно пользовался им. Он же вроде только под VCL ?

Vital DJ
Очень давно пользовался им. Он же вроде только под...

Нет. Там и для C# и для Java и ещё для чего то.

L_and_L- Автор вопроса
Handatros
понятно что хреново можно на любом языке написать....

Эти синтетические тесты (Scimark) одинаковы для Delphi и C# и адаптированы даже с учетом языка. Я даже помнится правил integer на nativeint в Дельфях, чтобы чуть быстрее тесты работали. Попугаев оба современный Delphi и .NET Core набирают почти одинаковых. А вот С++ уделывает обоих с разгромным счётом.

Евгений
Нет. Там и для C# и для Java и ещё для чего то.

Причем тут си и джава? Я про дельфи говорю. Что там было только vcl - нет fmx

L_and_L- Автор вопроса
Denis Simonov
Настоящая беда .NET и Java в сборке мусора, котора...

Да нет там давно с этим больших проблем даже на серверной стороне. Поколениями (коих 3) вычищают. И чаще всего новое добро уже влезает в освободившееся окно последнего поколения. На клиентской вообще не заметите, на серверной только при совсем кривом письме и немерянной нагрузке.

Тут наверное ответили уже в чате, но на буржуйском чате писали: многие использовали. И тут вроде. Но, я к примеру, юзаю Brookframework и Brook4FreePascal. С нагрузкой справляется. Сейчас на одном виртуальном сервере крутятся уже более 20 тысяч сайтов/доменов. Открываются быстро, админка работает тоже достаточно быстро. В сравнении с несколькими PHP сайтами просто даже не сравнить. Максимум на 5-10% загружает процессор этот менеджер.

Дмитрий Логинов
Я пару месяцев назад пытался разобраться с mORMot....

Не, товарищ, ни разу не работавший с WEB, REST, серверами приложений, стартанул успешно. Я ему на выбор несколько фреймворков давал. Сейчас уже порядка 5+ сервисов.

L_and_L
Да, признаться, та же фигня. Простыня там просто к...

Ну, да. Там особенности есть. Непривычно. CustomVariant, Record, везде свои типы. + маниакальная помешанность Арнауда на производительности.

Alexey Gavrilov
Не, товарищ, ни разу не работавший с WEB, REST, се...

Мне MARS понравился, но он без встроенного ОРМ

L_and_L
Да, признаться, та же фигня. Простыня там просто к...

Есть прямые и понятные фреймворки. Вот прям вообще как 2 байта. Но это точно не про mORMot.

L_and_L
Напрасно вы. Даже по синтетическим тестам .NET Cor...

Попы не пылают, пылают еретики! Извинити.

Hemul GM
Мне MARS понравился, но он без встроенного ОРМ

Daraya написана "в лоб" Плюс еще дофига. https://t.me/Delphi_Lazarus/243296

Alexey Gavrilov
Daraya написана "в лоб" Плюс еще дофига. https://t...

Попробуй потестить МАРС. там действительно удобно, если разобраться немного. Была б дока - было бы ещё лучше

Nik
Есть ссылка на этот МАРС?

https://github.com/andrea-magni/MARS

Nik
Есть ссылка на этот МАРС?

https://t.me/Delphi_Lazarus/238150

Nik
Есть ссылка на этот МАРС?

Рекомендую вот эту Демку

Там если что есть две версии продукта: работающий только в FreePascal - это соответственно Brook4FreePascal. Не использует внешних библиотек. Все сам, как говорится. И есть новый форк, которые работает микроHTTP сервере с помощью sagui (библиотека также автором этих библиотек, но на C++) - это BrooFramework - работает и на Delphi и на FreePascal и можно использовать из BrookFreePascal в легаси режиме

Nik
Есть ссылка на этот МАРС?

С базами он тоже прекрасно работает. FireDAC подключает сам и контекстно его инжектирует в роут. Удобно шо капец

Hemul GM
С базами он тоже прекрасно работает. FireDAC подкл...

Вот это мне не сильно важно - у меня работа с базами данных через свою прослойку, чтобы можно было разные DAC'и подключать)

Alexey Gavrilov
https://t.me/Delphi_Lazarus/238150

Короче, под свой фреймворк буду собственный лисапед придумывать 🙈😂

Hemul GM
С базами он тоже прекрасно работает. FireDAC подкл...

для сети он какую библиотеку использует?

Igor
для сети он какую библиотеку использует?

Инди для HTTP или DCS (там вроде веб сокеты)

Евгений
Мы переписывали сервер с Delphi на C#, потому что ...

Странная причина :) Мы вот переписали на C# потомуша там ASP.NET и тупо вебморду удобно делать, а с потоками в дельфе небыло никогда проблем :)

Arioch The
Так даже JS не медленнее. Давно известно, что 80%...

А потом мучительно вспоминать, что же за поле скрывается под именем Field[101]? 😁

Ed Doc
А потом мучительно вспоминать, что же за поле скры...

Это когда вместо того чтобы подумать, просто взял выхлоп иды и скомпилировал его?)))

Ed Doc
А потом мучительно вспоминать, что же за поле скры...

можно делать хитрее. предварительно один раз присваивать временные, локальные поля с помощью FildByName, и потом их юзать. у меня местами так и работает

Handatros
можно делать хитрее. предварительно один раз присв...

ЕМНИП, там фишка в том, что значение по FieldByName получается медленнее, чем по номеру поля в датасете. Т.о., ты ничего не выигрываешь таким способом. :)

Ed Doc
ЕМНИП, там фишка в том, что значение по FieldByNam...

Док, конечно по номеру быстрей. Но если бежишь по большой выборке, разница небольшая, зато если поменяешь запрос, то не будет ошибки

Ed Doc
ЕМНИП, там фишка в том, что значение по FieldByNam...

Ну...ты можешь заюзать чёт типа rtti, в смысле - хранить в поле класса нужный номер поля, а поле класса называется осмысленно же)

Неъматжон
MyField:=Tb.Fields[1]; и MyField:=Tb.FieldByName['...

И дальше использую MyField, разница будет?

Ed Doc
ЕМНИП, там фишка в том, что значение по FieldByNam...

я про доступ к полям в циклах (не только, но в основном) вместо while not Eof .... if FieldByName('test').AsString = '+' then .... можно написать: Field := FieldByName('test') while not Eof .... if Field.AsString = '+' then ....

Катерина Свиридова
Да, второе не странслируется)

А я думал, что оба в одно место ссылается...

Iluha Companets
enum

а поподробнее можно? а то меня помнится тоже за это критиковали

Олег Гранишевский
а поподробнее можно? а то меня помнится тоже за эт...

type FInx = ( f_ServerID, f_ID, f_DeviceID, f_DevLogID, f_SpdDT, f_TAS, f_Num, f_TCode, f_UCode, f_ECode, f_ValSize, f_Val );

Iluha Companets
type FInx = ( f_ServerID, f_ID, f_De...

так это ж надо четко знать порядок расположения полей для такого подхода, верно?

Олег Гранишевский
так это ж надо четко знать порядок расположения по...

угу. потом завтра внезапно поменялся запрос и....

Неъматжон
MyField:=Tb.Fields[1]; и MyField:=Tb.FieldByName['...

Так и не понял: MyField в обоих случаях указывает на один объект или на разные?

Iluha Companets
type FInx = ( f_ServerID, f_ID, f_De...

А что делать, если в двух таблицах одинаковое название колонок?

Денис Аленин
А что делать, если в двух таблицах одинаковое назв...

придумай что-нибудь. я привёл пример обработки записи одной таблицы

Денис Аленин
Мне не надо, меня от FieldByName не трясет.

Меня вот кстати тоже) Никогда не парился насчет этого

Денис Аленин
Мне не надо, меня от FieldByName не трясет.

ну вот когда затронет оптимизация - тогда затрясёт

Iluha Companets
ну вот когда затронет оптимизация - тогда затрясёт

Ностальгия... В одной строке - 18 FieldByName. В цикле второй вложенности. Во времена D3-D2005, когда сама по себе FieldByName это O(2). Еще и .Value. Переписал. Ускорение в 48 раз.

Iluha Companets
ну вот когда затронет оптимизация - тогда затрясёт

может и есть места где критично. в 'обычном коде' - чаще нет, максимум - циклы, и то...

Alexey Gavrilov
Ностальгия... В одной строке - 18 FieldByName. В ц...

я тут больше могу сказать. вполне возможно что если это всё утащить на строну бд в хп, то ускорение было бы и еще раз в 2-10 😂 по опыту, так сказать. но, понятно, бывают варианты

Ed Doc
А потом мучительно вспоминать, что же за поле скры...

Это тоже функция, этого в больших циклах тоже не надо. Var F1, F2,... F101: tField; и все сразу понятно :)

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта