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

Здравствуйте. Кто-нибудь пользуется какой-нибудь production-ready concurrent queue (буферизованный канал не

подходит т.к. он жестко ограничен)?

25 ответов

12 просмотров

Основные наверное это RabbitMQ (фиговая кластеризация) и Kafka (не совсем очередь, но с хорошим кластером), но есть еще куча аналогов

Sergey- Автор вопроса
Andrei 🦉 Sergeev
Основные наверное это RabbitMQ (фиговая кластериза...

Имеется в виду замена буферизованному каналу на уровне языка

Sergey- Автор вопроса
Andrei 🦉 Sergeev
хм, а чем вам канал не угодил?

Перечитайте пожалуйста вопрос

Sergey
Перечитайте пожалуйста вопрос

я прочитал и все равно не понял, чем канал жестко ограничен?

Sergey- Автор вопроса
Andrei 🦉 Sergeev
я прочитал и все равно не понял, чем канал жестко ...

При создании канала вы задаете capacity. Менять её нельзя.

Sergey
При создании канала вы задаете capacity. Менять её...

да, а чем это вам мешает? можно заранее задать достаточно большую capacity при необходимости

Sergey- Автор вопроса
Andrei 🦉 Sergeev
да, а чем это вам мешает? можно заранее задать дос...

Можно все делать заранее. Заранее закупить самый мощный сервер на земле с петабайтами оперативной памяти и установить емкость канала в триллион записей. Вопрос не про это.

Sergey
Можно все делать заранее. Заранее закупить самый м...

Вы можете описать задачу, которую вы решаете? Пока что выглядит как преждевременная оптимизация

Sergey
Можно все делать заранее. Заранее закупить самый м...

А зачем вам триллион записей в канале? Вы что-то, видимо, не понимаете в его работе

так в буферизированном канале просто создается массив определенного типа. для конкуррентности используюется интернал реализация мьютекса, которая мб дает некий буст по скорости. думаю, что слайс, прикрытый обычным sync.Mutex даст то, что вы хотите, с незначительным проседанием по производительности

Elmanov Anton
так в буферизированном канале просто создается мас...

Мне кажется что можно неплохо так влететь при реализации своего канала вот так вот в лоб, как минимум он может сожрать бесконечное количество памяти:)

Andrei 🦉 Sergeev
Мне кажется что можно неплохо так влететь при реал...

а буферизированный канал на большое число элементов не сделает то же самое?

Elmanov Anton
а буферизированный канал на большое число элементо...

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

Sergey- Автор вопроса
Elmanov Anton
так в буферизированном канале просто создается мас...

Это все замечательно, но это нужно программировать. Вопрос и был есть ли готовые решения.

Sergey
Это все замечательно, но это нужно программировать...

Есть менеджеры очередей из которых можно забирать прикладом данные. RabitMQ тот же... Не думаю, что эту часть стоит реализовывать в самом прикладе. MQха сгладит пиковые нагрузки и выступит в качестве буфера.

Sergey
Это все замечательно, но это нужно программировать...

Конечно есть, тут скорее вопрос с выяснением ваших требований. Если загуглить golang concurrent queue, то выпадет много всего, например https://github.com/enriquebris/goconcurrentqueue в виду кажущейся простоты, я бы все же сунулся в этом сам. Но и либы использовать конечно привествуется.

Sergey- Автор вопроса
Andrei 🦉 Sergeev
Ну я скорее имел ввиду правильную очистку нижележа...

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

Elmanov Anton
Дельный коммент. Да, вы правы, что слайс с его пре...

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

Daniel Podolsky
каналы прекрасны тем, что с ними напрямую взаимоде...

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

Elmanov Anton
Да, доработка для шедулера с каналами ценна. Нельз...

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

Daniel Podolsky
не, не получится. горутина должна как-то заблокиро...

горутина может заблокироваться на mu.Lock() после проверки, и будет то же самое?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта