Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Какую очередь (queue) лучше (будет работать быстрее) использовать? / 10 сообщений из 10, страница 1 из 1
19.08.2020, 14:57
    #39990817
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Всем привет! У меня есть UDP server, который принимает пакеты и отправляет их клиентам.
Схема выглядит примерно так:
1. DatagramSocket получает пакет данных
2. Помещает полученный пакет в очередь (сейчас я использую ConcurrentLinkedQueue)
3. Потоки отправители берут пакет из очереди queue.poll() и отправляют его.

Подскажите пожалуйста какую очередь лучше использовать для многопоточной работы? Основной характеристикой очереди я считаю скорость, нужно быстро положить в очередь и быстро забрать.
...
Рейтинг: 0 / 0
19.08.2020, 15:06
    #39990820
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Если твоё приложение уже протестировано и работает то пускай так и будет.
Я-бы не стал ничего изменять до тех пор пока ты не будешь терять входные пакеты.
...
Рейтинг: 0 / 0
19.08.2020, 15:08
    #39990824
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
mayton,

Нет приделов совершенству :) Хотелось бы ускорить процесс.
...
Рейтинг: 0 / 0
19.08.2020, 15:10
    #39990826
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Когда говорят об ускорении - то обычно имеют метрику. Или измерение.

Вот сколько у тебя сейчас UDP пакетов в секунду пропускает твоё приложение?
Без этого у нас не будет сравнения и мы не сможем ускорять и совершенствовать.
В этом - суть инженерного ремесла. Измерять и улучшать.
...
Рейтинг: 0 / 0
19.08.2020, 15:13
    #39990827
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
mayton,

Это понятно. Но я ведь не велосипед изобретаю:) Очереди это всем известные классы, которыми много кто пользовался. Возможно кто-то уже проводил сравнение или читал в интернете об этом. Я могу сделать свой стенд для тестирования, просто не хочу тратить время :) Возможно уже кто-то это делал до меня.
...
Рейтинг: 0 / 0
19.08.2020, 15:18
    #39990833
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Circle Ring Buffer по определению самое простое и быстрое.
Дополнительный плюс IMHO то, что у нее фиксированный размер (bounded queues). В ситуации, когда сообщения могут приходить быстрее, чем консьюмер их вычитывают, ConcurrentLinkedQueue идет лесом.

IMHO & AFAIK

Можно посмотреть коллекции на
https://jctools.github.io/JCTools/
...
Рейтинг: 0 / 0
19.08.2020, 15:27
    #39990835
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Mandarin
mayton,

Это понятно. Но я ведь не велосипед изобретаю:) Очереди это всем известные классы, которыми много кто пользовался. Возможно кто-то уже проводил сравнение или читал в интернете об этом. Я могу сделать свой стенд для тестирования, просто не хочу тратить время :) Возможно уже кто-то это делал до меня.


Ничего тебе не понятно.
Твой вопрос мог бы иметь место, но он должен звучать так - "Ребят, есть такая вот система, с теоретической точки зрения какая очередь могла бы тут работать лучше и почему?"
Потом ты бы мог взять самый разумный с твоей точки зрения ответ и применить его на практике как первый вариант. Потом измерить систему, понять устраивает или нет, если не устраивает - пойти на форму и уже задать более конкретный вопрос и т.д. И так по кругу, пока система не будет работать так как тебе надо(или ты поймешь что такую систему создать либо дорого, либо труднозатратно, либо совсем невозможно). Это суть инженерной работы.
А то что спрашиваешь ты - это тык в небо, такое же бессмысленное и беспощадное занятие как поливать огурцы во время дождя.
...
Рейтинг: 0 / 0
19.08.2020, 15:29
    #39990836
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Leonid Kudryavtsev
Circle Ring Buffer по определению самое простое и быстрое.
Дополнительный плюс IMHO то, что у нее фиксированный размер (bounded queues). В ситуации, когда сообщения могут приходить быстрее, чем консьюмер их вычитывают, ConcurrentLinkedQueue идет лесом.

IMHO & AFAIK

Можно посмотреть коллекции на
https://jctools.github.io/JCTools/

Учитывая подготовку автора, я-бы очень осторожно подходил с советами. Работающее приложение - ценнее чем
гипотетически улучшенное но с неизвестным числом дефектов.
...
Рейтинг: 0 / 0
20.08.2020, 00:03
    #39990979
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Вообще UDP-протокол хитрая штука. Даже будучи написанным на ассемблере в идеальных
условиях при отсутствии конкурентных процессов - пакеты все равно теряются. Где-то в пути.

Не заложен в протокол контроль стрима как в TCP. Поэтому отвественность за потерю пакета - полностью
на прикладном слое. Можно вести учет количества отправленных. Или вести диалог между отправителем
и получателем и переспрашивать его сколько и чего принято.

Для некоторых коротких и почти stateless и повторяемых протоколов (типа DNS) эти особенности не имеют
значения. Ну не ответил DNS, можно повтор сделать. Не ответил еще раз - можно на secondary dns
переключиться. Вобщем up to you.
...
Рейтинг: 0 / 0
20.08.2020, 07:47
    #39991020
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какую очередь (queue) лучше (будет работать быстрее) использовать?
Mandarin
mayton,

Нет приделов совершенству :) Хотелось бы ускорить процесс.

Иначе твой вопрос выглядит так:
- переменная получает значение из сети
var переменная = 12345;
Но нет предела совершенству!
Хотелось бы ускорить этот процесс!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Какую очередь (queue) лучше (будет работать быстрее) использовать? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]