LINUX.ORG.RU

Racket быстрее для многопоточной работы, чем Go

 , ,


5

6

Микрозамер скорости сервера эха: https://racket.discourse.group/t/racket-matching-or-exceeding-golang-for-echo-server-performance/660

Результаты:

Racket: ~114,584 сообщений/сек
Go (default): ~85,650 сообщений/сек
Go (GOMAXPROCS=1): ~108,495 сообщений/сек

Код для Racket (ссылка) использует потоки Racket (thread), код для Go (ссылка) использует горутины.

★★★★★
Ответ на: комментарий от anonymous

Приложения разработанные на Racket можно ли использовать на другой машине где не установлен Racket?

Да. Компилируется бинарник c необходимыми библиотеками. https://docs.racket-lang.org/raco/exe-dist.html

Из одного исходника можно делать приложения для Linux и Windows.

Фактически, это почти единственная причина, по которой я не перешёл на Haskell. Там сделать дистрибутив приложения с графическим интерфейсом для меня запредельно сложно.

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

Претензии всегда были только к скорости выполнения (всё-таки динамический язык со сборкой мусора и исключениями очень быстрым быть не может).

Я как-то с пяток лет назад, или около того, смотрел сорцы гошного сборщика мусора - это позор. Подустаревший GenGC в SBCL - рокет сайенс, на фоне го.

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

mv ★★★★★
()
Ответ на: комментарий от mv

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

100-200 Мб - это же копейки. Память дешевая. Кто-то еще покупает серверы с < 512 Гб памяти? Ну и виртуалка с 2 Гб стоит копейки. По сравнению с расходами на зарплату нормального C++ разработчика можно даже не обращать внимание на такие расходы.

xpahos ★★★★★
()
Ответ на: комментарий от xpahos

100-200 Мб - это же копейки. Память дешевая. Кто-то еще покупает серверы с < 512 Гб памяти? Ну и виртуалка с 2 Гб стоит копейки. По сравнению с расходами на зарплату нормального C++ разработчика можно даже не обращать внимание на такие расходы.

Ну, друг... В масштабах облака это выливалось в единовременную затрату в $5,000,000 и в недополученную прибыль $2,000,000 каждый месяц. А херота та была уровня wget, со скриптнёй на баше в обвязке.

CFO перед IPO такое в прод не пропустил, естественно.

Погроммист на C++ такое бы легко написал, и оно жрало бы мизер, невидимо вписываясь в уже прописанный бюджет на системный оверхэд.

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

mv ★★★★★
()
Ответ на: комментарий от mv

а бедные манагеры гошников пишут докладные фин.директору, почему в облаке надо зарезервировать ещё процент памяти на прикладные задачи и теперь всё время недополучать денег с аренды этой памяти клиентам облака.

и заметь - они эти деньги получают :)

сорцы гошного сборщика мусора - это позор. Подустаревший GenGC в SBCL - рокет сайенс, на фоне го.

Доооо бро! Вот лисперы денег не просят! :) И не потому что не дадут, a потому что нет вас нигде, ни в облаках ни он-премис. Лишперы - самые лузеры индустрии, имели всё и всё прос***ли :-D

anonymous
()
Ответ на: комментарий от mv

Я как-то с пяток лет назад, или около того, смотрел сорцы гошного сборщика мусора - это позор. Подустаревший GenGC в SBCL - рокет сайенс, на фоне го.

А сейчас как? Go хотя бы развивается, в отличие от.

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

Нет.

Ну, друг... В масштабах облака это выливалось в единовременную затрату в $5,000,000 и в недополученную прибыль $2,000,000 каждый месяц. А херота та была уровня wget, со скриптнёй на баше в обвязке.

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

Погроммист на C++ такое бы легко написал, и оно жрало бы мизер, невидимо вписываясь в уже прописанный бюджет на системный оверхэд.

Погроммист на C++ писал бы прикладную задачу >9000 человекочасов, обмазываясь шаблонами (а то и макросами), где не нужно, превращая простой wget в огромную многослойную кашу из абстракций, вместо решения собственно прикладной задачи.

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

А мы наоборот переписываем иногда C++-хлам на Go, экономя миллионы долларов на сопровождении этого месива абстракций и решая прикладные задачи бизнеса, а не надрачиваем на байты, где не надо.

korvin_ ★★★★★
()
Ответ на: комментарий от monk

Фактически, это почти единственная причина, по которой я не перешёл на Haskell

а остальные причины какие?

Minona ★★☆
()
Ответ на: комментарий от korvin_

А мы наоборот переписываем иногда C++-хлам на Go

Если вам вдруг нечего делать, не могли бы в переписать с Go на Go вот этот хлам: https://github.com/fluent/fluentbit-operator

Почему-то мелкий демон, который:

а) принимает событие от кубернетеса «конфиг поменялся»

б) посылает запрос в нужные поды «перечитай конфиг»

погибает от рук OOM-убийцы. Количество подов, которые нужно перезагружать 36 штук. Доступных ресурсов 50Мб. Пока увеличил доступную память до 128Мб, но …

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

мелкий демон

Дружище, там не мелкий демон, а какой-то комбайн. А то, что тебе надо поместится в один файл main.go

Может ты что-то не договариваешь или не умеешь выбирать инструмент под задачу.

anonymous
()
Ответ на: комментарий от anonymous

Ну, милейший, одно и то же можно написать как какой-то комбайн, а можно и как мелкий демон.

fluentbit-operator делает две вещи: создаёт окружение для fluentbit (т.е. берёт несколько yaml’ов, преобразует их в несколько других yaml’ов, посылает их в api-сервис), поддерживает это окружение, если что-то поменялось, посылает в поды команду перечитать конфигурацию. Всё. На что уходят десятки мегабайт памяти неизвестно. Биткоины добывают не иначе.

ugoday ★★★★★
()
Ответ на: комментарий от Minona

call/cc и DrRacket.

Хотя Control.Monad.Cont и leksah меня бы устроили. Но как раз при попытке поднять leksah я понял, что с развёртыванием приложений с GUI в Haskell всё очень печально.

monk ★★★★★
() автор топика
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от anonymous

и заметь - они эти деньги получают :)

На их горе, СЕО-инженер «заболел», вместо него поставили СЕО-финансиста. Ему до фонаря на все эти технологии, лишь бы денег не просило. Не разрешил, короче. Не только не разрешил, но и вообще: бюджет на R&D срезал.

Я IPO дождался и сбежал в другой, инженерный стартап.

mv ★★★★★
()
Ответ на: комментарий от korvin_

А сейчас как? Go хотя бы развивается, в отличие от.

Не смотрел. А в то время, когда смотрел, купил книжку по голангу, с фотографией двух хипстеров на задней обложке (авторы) - всё, как положено, короче. Но в здании IBM - бывшем здании DEC - протекла крыша, и как раз на мой стол. Книга промокла, и я понял, что это знак.

Нет.

Я истории из своей жизни, из своего опыта рассказываю.

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

Да, говнокодеры.

Погроммист на C++ писал бы прикладную задачу >9000 человекочасов, обмазываясь шаблонами (а то и макросами), где не нужно, превращая простой wget в огромную многослойную кашу из абстракций, вместо решения собственно прикладной задачи.

Зато у него годовая зряплата $200k, а $2M каждый месяц контора бы недополучала. Профит!

А мы наоборот переписываем иногда C++-хлам на Go, экономя миллионы долларов на сопровождении этого месива абстракций и решая прикладные задачи бизнеса, а не надрачиваем на байты, где не надо.

Такая ситуация не только в программировании. Например, в США фирменные запчасти стоят дешевле нормочаса автомеханика, у которого из образования - общая школа, плюс курсы механика. Соответственно, никто ремонтом узлов не занимается - сломанное всё выкидывается таким большим куском, который наименее затратно откручивать, и ставится новый. Лишь бы механик поменьше времени затратил. А в России, наоборот: даже у дилера что-то там вскрывают, чистят, продувают, собирают обратно.

Пример: травящие давление тефлоновые кольца на первичном валу АКПП. В России дилеру по-гарантии предписано снимать коробку, половинить её, менять кольца, собирать коробку обратно и ставить в машину. В США: менять коробку целиком на новую. Ибо Вольво Карс это тупо дешевле обходится.

mv ★★★★★
()
Ответ на: комментарий от monk

Но как раз при попытке поднять leksah я понял, что с развёртыванием приложений с GUI в Haskell всё очень печально.

Мне казалось, что leksah умерло. Что тут первично: сложность «развёртывания приложений с GUI» или то, что мёртвый проект не поддерживается, поэтому его и сложно развернуть?..

Кстати, не знаешь почему проект вообще забросили? «Просто» не нашлось достаточного количества энтузиастов для развития или какие-то фундаментальные проблемы есть?

DarkEld3r ★★★★★
()

Микрозамер

Бесполезно, девки не оценят.

Psychosis
()
Ответ на: комментарий от DarkEld3r

Мне казалось, что leksah умерло.

Ну как умерло. Последний комит июнь 2021. Я его пытался поднять в апреле 2021. Я его даже поднял. Но каталог с ним занимает 7ГБ и в процессе создался каталог C:\sr ещё на 10ГБ. А также каталоги C:\tools, %APPDATA%\ghc, %APPDATA%\local, %LOCALAPPDATA%\Programs (здесь ещё 14ГБ). Если удалить любой из них, работать перестаёт. Что именно необходимо для работы неясно. Причём возможно я не все нужные каталоги нашёл. Развёртка с созданием всего этого через stack занимает примерно неделю. Я даже другим пользователем на этом же компьютере запустить программу не могу. Для сравнения DrRacket занимает 0,5 ГБ и его можно установить копированием одного каталога.

После этого попробовал сделать проект с одной кнопкой и полем ввода. Получил привязку к каталогу %LOCALAPPDATA%\Programs и при переносе бинарника с библиотеками в другой каталог падение по пункту меню «вставить emoji». Причём отключить пункт меню тоже никак.

На линуксе хорошо. До тех пор, пока не пытаешься перенести на другой линукс. Тогда опять только компиляция всего мира из исходников. Или nix-docker. Но это не для графических приложений.

monk ★★★★★
() автор топика
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от DarkEld3r

Кстати, не знаешь почему проект вообще забросили? «Просто» не нашлось достаточного количества энтузиастов для развития или какие-то фундаментальные проблемы есть?

У него, судя по комитам, один разработчик остался. Фундаментальных проблем нет, всё работает. Есть общая для всех хаскелевских проектов проблема: собрать под нужные версии библиотек и платформы. Но это как раз требует всего лишь, чтобы проект был живым (его кто-то сопровождал).

monk ★★★★★
() автор топика
Ответ на: комментарий от anonymous

@monk этот пост не к вам обращен.

Сколько строк займет программа на haskell, которая не зная ни чего
о xlsx, на основании скажем пятидесяти xlsx, сгенерировать *.h файлы, которые
пригодны для того, чтобы их можно было использовать для загрузки любого xmls?

В моем API разработана функция, которая ни чего не зная о метаданных какого-либо формата проанализировать их и создать метаданные /в частности *.h файлы/.
Функция содержит всего лишь 400 строк.

В чем смысл поста?

О том что многие УЧАТ, что такое метаданные, мета программирование, абстракции и … … … А сами то по существу в этих вопросах и не БУМ БУМ.

К сожалению в inet статей УЧИТЕЛЕЙ много …

Почему же так?

Нервы, засорение атмосферы, водофемов.  
Но зато у меня пизвание: я погомист haskel.  
Пишу погаммы.  
Флужу на ЛОР.  
До свифания. 

Владимир

anonymous
()
Ответ на: комментарий от monk

собрать под нужные версии библиотек и платформы

Кстати, в этом Racket тоже лучше. Я на современной версии могу взять пакет 2007 года и он скомпилируется и запустится без каких-либо плясок с бубном. В Haskell за это время почти у всех библиотек поменялось API. А если пытаться в зависимостях взять фиксированную версию, то она хочет старый ghc, а старый ghc хочет старую операционную систему.

monk ★★★★★
() автор топика
Ответ на: комментарий от anonymous

В моем API разработана функция, которая ни чего не зная о метаданных какого-либо формата проанализировать их и создать метаданные /в частности *.h файлы/. Функция содержит всего лишь 400 строк.

Когда опубликуешь? А то сплошная песня «У нас есть ТАКИЕ приборы! Но мы вам о них не расскажем.».

monk ★★★★★
() автор топика
Ответ на: комментарий от monk

Когда опубликуешь? А то сплошная песня «У нас есть ТАКИЕ приборы! Но мы вам о них не расскажем.».

Зачем мне корпорациям дарить новую и эффективную технологию?
Ведь говорю лишь о малой части «приборов».

Пусть создают свои ШИЗА ВСЕЛЕННЫЕ! ...

Для меня важнее в форумах суждения о новых подходах к разработке, а реализация не так и важна

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Зачем мне корпорациям дарить новую и эффективную технологию?

Да и форумы позитива не прибавляют …

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Ведь говорю лишь о малой части «приборов».

В частности и новая технология разработки объектно-ориентированных программ с использование мета данных.
Это вообще песня!
О ней пока говорить НЕ БУДУ! …

Владимир

anonymous
()
Ответ на: комментарий от monk

Да, в haskell любят вечные эксперименты, в том числе, над людьми, пытающимися использовать haskell

anonymous
()
Ответ на: комментарий от anonymous

Да, в haskell любят вечные эксперименты, в том числе, над людьми, пытающимися использовать haskell

Не в этом дело.
Виновато как всегда зеркало, что …

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Жаль пацанов молодых.
Их приглашают на всякие соревнования и они за ТРУСЫ С ЭМБЛЕМОЙ ГУГЛА отдают хорошие идеи …

Владимир

anonymous
()
Ответ на: комментарий от monk

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

Если тебе понравился хаскель, но ему ты предпочёл ракет, то как именно ты живёшь на ракете? Вот есть тайпед-ракет, но разве писать с типами на ракете принято? Вывод типов наверняка не такой крутой, да и в целом ml-style type system предоставляется даже не относительно известным typed racket, а вообще ещё одним ‘пакетом’ plait.

Насколько оно взаимозаменяемо? С точки зрения экспириенса от написания.

Просто в сеттинге «выбирал между ракет и хаскель, выбрал ракет по инфраструктурным соображениям» как будто есть скрытая пресуппозиция, что кроме инфраструктуры и всяких минорных вещей, они схожи. Но ведь они довольно разные… А схожи лишь в том, что оба считаются экзотикой (и то, по-разному).

Интересуюсь как хобби-хаскелист, который думает, куда бы уйти, чтобы и ux от языка сохранить, и с описанными тобой проблемами дела не иметь.

anonymous
()
Ответ на: комментарий от anonymous

Предлагаю посмотреть на такие языки: scala, kotlin, f# и даже rust.

Если хочется хитровывернутых вещей, от которых пар из ушей идет, то тогда scala, особенно ее третья версия

Если страсть к практике, прагматике и лаконичности, то kotlin

Если нравятся языки ML, а абревиатура MS не вызывает отторжения (ну, мало ли), то тогда f#

Если хочется хаскеля, но без сборки мусора и под соусом c++, то тогда rust

anonymous
()
Ответ на: комментарий от monk

Когда опубликуешь?

Пожалуй, можно показать вам свой ПРИБОР, но не здесь и не сейчас … Если никому обещаете потом не рассказывать об этом.

Владимир

anonymous
()
Ответ на: комментарий от monk

распределением горутин по системным потокам управлять почти нельзя

Можно прибить горутину к труду так, чтобы в нем больше не было горутин. Вопрос с горутинами рантайма и прочего остаётся открытым.

anonymous
()
Ответ на: комментарий от anonymous

сраный тэ девять

Расслабьтесь, мой невротический аноним … У вас тремор от волнения.

Владимир

anonymous
()

Эта io.Copy аллоцирует буфер на 32kB и копирует через него. Потом буфер выкидывается. Можно использовать свой буфер и класть его в sync.Pool. Это снизит давление на память и на сборщик.

anonymous
()
Ответ на: комментарий от anonymous

У меня т9ремор от9 интеллект9уальных сист9ем современных ст9упидфонов. Спасибо, расслабился, помогло.

anonymous
()

И что за машина. Кол-во ядер интересует.

anonymous
()
Ответ на: комментарий от olelookoe

На йо_уринге оно все быстрее. Только не кроссплатформа. Отстой ваш Си.

anonymous
()
Ответ на: комментарий от mv

Не гони. Говнокод причина жора. Как всегда. Любой сервис на Но элементарен и там память только на стекле и нужна. Нечему жрать. А сборщик не возвращает память системе, если выделять много. Он всю свободную не вернёт, помятуя прошлое.

anonymous
()
Ответ на: комментарий от mv

Никто не будет держать на балансе сиплюсплюсника ради пары вгет-лайк-хелловордов. Уж лучше растовика нанять тогда.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.