|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Доброго дня! Есть класс, представляющий собой адрес (хост + порт), сообщение (msg) и результат доставки сообщения (done): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В процессе работы формируется список таких сообщений, который необходимо доставить по адресам: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Все вроде ОК. Сообщения отправляются, результат выставляется (done = true/false), но распечатать я их не могу. Последний цикл проскакивает как будто печатать нечего, а на самом деле там может быть много элементов. Как сие победить? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:17 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
fplab Код: java 1.
Последний цикл проскакивает как будто печатать нечего И, правда, удивительно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:20 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
fplab int procNumber = Runtime.getRuntime().availableProcessors(); ExecutorService executor = Executors.newFixedThreadPool(procNumber); Немного странный выбор размера пула. Основную часть веремени отправки занимает передача по сети. Поэтому эффективных потоков может быть на много больше чем ядер процессора. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:22 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Blazkowicz, Спасибо, оценил :) Исправил. Исключений нет. Не печатается ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:23 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Blazkowiczfplab int procNumber = Runtime.getRuntime().availableProcessors(); ExecutorService executor = Executors.newFixedThreadPool(procNumber); Немного странный выбор размера пула. Основную часть веремени отправки занимает передача по сети. Поэтому эффективных потоков может быть на много больше чем ядер процессора. Да я по всякому пробовал, честно говоря. Специально ограничивал размер списка отправляемых сообщений. Один черт - результат тот же: не печатает ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:25 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Ну, так а что там с пошаговой отладкой? messages пустой? futures пустой? Почему везде перебор по индексу как в школе вместо стрима или хотя бы foreach? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:43 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Почему используется CompletionService, но не используются его методы? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:47 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
BlazkowiczНу, так а что там с пошаговой отладкой? messages пустой? futures пустой? Почему везде перебор по индексу как в школе вместо стрима или хотя бы foreach? Пошагово все отлично. messages и futures - не пустые. Перебор по индексу, т.к. java 7. Вот что-то смутно вспоминается мне такой "зверек" как CompletableFuture. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:49 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
BlazkowiczПочему используется CompletionService, но не используются его методы? Пните, пожалуйста, в направлении примера (если есть). Проект свалился неожиданно - пришлось срочно переключаться и не получается войти в поток :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 12:50 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
fplabПните, пожалуйста, в направлении примера Лог примера с айдишниками потоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 13:49 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Надо послать 398 сообщений. Часть отправляется, остальные висят. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
И все - после этого висит. Вот код, который это выводит: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 14:05 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Судя по логу в пуле всего 4 потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 19:46 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
mayton, Точно. Пробовал увеличить в 10 раз. Все равно проблема остается ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2018, 08:31 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Сделай дамп потоков. Посмотрим чего они ждут. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2018, 08:42 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
maytonСделай дамп потоков. Посмотрим чего они ждут. Вот именно. Начинать нужно было с состояния сообщений - сколько дошло, хотя бы. У тебя второй "хвост" торчит (который ты нам, кстати, и не показал). "Первым делом на call посадить" заменить метод call() на более простой, скорее всего все заработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2018, 11:47 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Код: java 1. 2.
выход на бесконечный цикл при первой ошибке. Ну и сами ошибки игнорируются *(who cares) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2018, 14:01 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
Не проще ли написать messages.parallelStream().forEach (m-> sendMessage(m)) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2018, 12:23 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
кстати, работает ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2018, 18:59 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
cossack5Не проще ли написать messages.parallelStream().forEach (m-> sendMessage(m)) ? Совет не полный без информации о том из какого пула потоков этот параллелизм берётся. И что будет при одновременном использовании нескольких parallelStream(). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2018, 19:07 |
|
Многопоточная обработка элементов ArrayList
|
|||
---|---|---|---|
#18+
там же вроде есть какой то дефолтовый тредпулэкзекутор, расшаренный на всё приложение, и который можно чем-то заменить. правда, там синтаксис будет уже не такой ээээ лаконичный. не? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2018, 22:45 |
|
|
start [/forum/topic.php?fid=59&fpage=40&tid=2121788]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
112ms |
get tp. blocked users: |
2ms |
others: | 305ms |
total: | 507ms |
0 / 0 |