LINUX.ORG.RU

Garnet - кэш от Microsoft, написан на C#, делает и Redis, и Dragonfly

 , , garnet, ,


0

5

Как видно из бенчмарков, это сейчас вообще самый быстрый сервер структур данных на всём диком западе:

https://microsoft.github.io/garnet/docs/benchmarking/results-resp-bench

Парктически полностью совместим с Redis на уровне API, но при этом:

  • Имеет либеральную MIT лицензию, как и все последние крупные проекты MS, и этим крайне выгодно отличается от Redis
  • Написан на C#, и позволяет удобно расширять сервер
  • Делает по производительности и Redis, написанный на Си, и Dragonfly написанный на C++

Последний пункт особенно забавен, надеюсь хоть это у крестолюбцев в голове что-либо прочистит, и вот это дебильное мнение что «сипласплас эта быстра», а также глупые наезды на GC, наконец канут в лету. Кресты в современном мире нахер не нужны, и никакой даже особой производительности не дают. Да и Си, в принципе, тоже нигде не нужен выше уровня ядра.

Я кстати, в свое время написал на C# видеостриминг-сервер, и клиент, практически не используя кресты(было немного C++/CLI для связи с COM итд), и проблем с производительностью там не было. Но что я - вон целый MS Research делает продукты вон какого уровня.

★★

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

Честный вопрос: сколько в крестах таких магических штук, работающих быстрее наивного кода, и сколько лет опыта нужно, чтобы на гора выдавать код, сопоставимый (как показывает пример от eao) с наивным кодом на шарпе?

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

использование shared_ptr в данном случае - это антипаттерн. тут надо использовать обычный указатель, как это будет в лиспе.

shared_ptr - это управление ресурсом на основе счета ссылок. тут это вообще не надо.

использование векторов - тоже не надо. по крайней мере в лисповом коде это похоже просто массив. вот и используй массив и тут.

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

Честный вопрос: сколько в крестах таких магических штук

В приведенном примере нет никаких магических штук. За реально магическими штуками нужно, например, вот сюда.

Здесь достаточно просто понимания того, как работает std::vector. И чем отличается std::shared_ptr<T> a{new T()} от std::shared_ptr<T> a = std::make_shared<T>().

ИМХО, для C++ника такое понимание необходимо. Если только он не Qt-шный формошлепщик.

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

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

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

Но если туп как дерево, родишься баобабом и будешь баобабом тыщу лет пока помрёшь.

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

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

Он не каких-то магических штук добавил, он тупо удалил часть логики, демонстрирующей суть.

Какую такую часть? Все объекты создаются динамически, все компирования происходят, все swap-ы выполняются.

Покажи пальцем что куда пропало. Если сможешь, конечно.

Про сложные структуры данных, работу с ними, и их менеджмент.

Все это осталось на своих местах.

eao197 ★★★★★
()