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

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

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

25 ответов

9 просмотров

Основные наверное это 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() после проверки, и будет то же самое?

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

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

Какой-то там пердун в 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
Карта сайта