|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Всем привет! У меня есть UDP server, который принимает пакеты и отправляет их клиентам. Схема выглядит примерно так: 1. DatagramSocket получает пакет данных 2. Помещает полученный пакет в очередь (сейчас я использую ConcurrentLinkedQueue) 3. Потоки отправители берут пакет из очереди queue.poll() и отправляют его. Подскажите пожалуйста какую очередь лучше использовать для многопоточной работы? Основной характеристикой очереди я считаю скорость, нужно быстро положить в очередь и быстро забрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 14:57 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Если твоё приложение уже протестировано и работает то пускай так и будет. Я-бы не стал ничего изменять до тех пор пока ты не будешь терять входные пакеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:06 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
mayton, Нет приделов совершенству :) Хотелось бы ускорить процесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:08 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Когда говорят об ускорении - то обычно имеют метрику. Или измерение. Вот сколько у тебя сейчас UDP пакетов в секунду пропускает твоё приложение? Без этого у нас не будет сравнения и мы не сможем ускорять и совершенствовать. В этом - суть инженерного ремесла. Измерять и улучшать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:10 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
mayton, Это понятно. Но я ведь не велосипед изобретаю:) Очереди это всем известные классы, которыми много кто пользовался. Возможно кто-то уже проводил сравнение или читал в интернете об этом. Я могу сделать свой стенд для тестирования, просто не хочу тратить время :) Возможно уже кто-то это делал до меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:13 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Circle Ring Buffer по определению самое простое и быстрое. Дополнительный плюс IMHO то, что у нее фиксированный размер (bounded queues). В ситуации, когда сообщения могут приходить быстрее, чем консьюмер их вычитывают, ConcurrentLinkedQueue идет лесом. IMHO & AFAIK Можно посмотреть коллекции на https://jctools.github.io/JCTools/ ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:18 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Mandarin mayton, Это понятно. Но я ведь не велосипед изобретаю:) Очереди это всем известные классы, которыми много кто пользовался. Возможно кто-то уже проводил сравнение или читал в интернете об этом. Я могу сделать свой стенд для тестирования, просто не хочу тратить время :) Возможно уже кто-то это делал до меня. Ничего тебе не понятно. Твой вопрос мог бы иметь место, но он должен звучать так - "Ребят, есть такая вот система, с теоретической точки зрения какая очередь могла бы тут работать лучше и почему?" Потом ты бы мог взять самый разумный с твоей точки зрения ответ и применить его на практике как первый вариант. Потом измерить систему, понять устраивает или нет, если не устраивает - пойти на форму и уже задать более конкретный вопрос и т.д. И так по кругу, пока система не будет работать так как тебе надо(или ты поймешь что такую систему создать либо дорого, либо труднозатратно, либо совсем невозможно). Это суть инженерной работы. А то что спрашиваешь ты - это тык в небо, такое же бессмысленное и беспощадное занятие как поливать огурцы во время дождя. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:27 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Circle Ring Buffer по определению самое простое и быстрое. Дополнительный плюс IMHO то, что у нее фиксированный размер (bounded queues). В ситуации, когда сообщения могут приходить быстрее, чем консьюмер их вычитывают, ConcurrentLinkedQueue идет лесом. IMHO & AFAIK Можно посмотреть коллекции на https://jctools.github.io/JCTools/ Учитывая подготовку автора, я-бы очень осторожно подходил с советами. Работающее приложение - ценнее чем гипотетически улучшенное но с неизвестным числом дефектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2020, 15:29 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Вообще UDP-протокол хитрая штука. Даже будучи написанным на ассемблере в идеальных условиях при отсутствии конкурентных процессов - пакеты все равно теряются. Где-то в пути. Не заложен в протокол контроль стрима как в TCP. Поэтому отвественность за потерю пакета - полностью на прикладном слое. Можно вести учет количества отправленных. Или вести диалог между отправителем и получателем и переспрашивать его сколько и чего принято. Для некоторых коротких и почти stateless и повторяемых протоколов (типа DNS) эти особенности не имеют значения. Ну не ответил DNS, можно повтор сделать. Не ответил еще раз - можно на secondary dns переключиться. Вобщем up to you. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 00:03 |
|
Какую очередь (queue) лучше (будет работать быстрее) использовать?
|
|||
---|---|---|---|
#18+
Mandarin mayton, Нет приделов совершенству :) Хотелось бы ускорить процесс. Иначе твой вопрос выглядит так: - переменная получает значение из сети var переменная = 12345; Но нет предела совершенству! Хотелось бы ускорить этот процесс! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 07:47 |
|
|
start [/forum/topic.php?fid=59&msg=39990827&tid=2120705]: |
0ms |
get settings: |
21ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
275ms |
get tp. blocked users: |
2ms |
others: | 308ms |
total: | 696ms |
0 / 0 |