|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
есть такой метод. принимает сет стрингов, возвращает мапу стрин-стринг. не важно как он ее делает. важно что процесс очень трудозатратный и поделить его можно только пополам, что я и делала. Код: 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.
все работало пока у процессора было 2 ядра. а потом их стало 32 и программа теперь нагружает машину на 2%. Подсказали надо использовать экзекьютор. Я пытаюсь. Но опыта с ним нет. то что я пишу Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.
не работает. просто запускает одно и тоже несколько раз. Как это делается по человечески? Заранее спасибо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 14:43 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Samantata есть такой метод. принимает сет стрингов, возвращает мапу стрин-стринг. не важно как он ее делает. важно что процесс очень трудозатратный и поделить его можно только пополам, что я и делала. Если поделить можно только пополам, то непонятно, что Вы хотите достигнуть. "Поделено пополам" на мой взгляд крайне странно (с точки зрения кода). При взгляде на код, складывается ощущение, что Код: java 1.
поделить можно минимум в 1000 раз ExecutorServiceExample не смотрел. Если не работает - дебажить надо ))). Но лично мне executor'ы не очень нравятся, мне кажется руками проще и понятнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 15:15 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Samantata, Выделите громоздкое в метод отдельный. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 15:20 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Samantata не работает. просто запускает одно и тоже несколько раз. Код: java 1. 2. 3.
А почему должно быть разное, если для нескольких заданий/потоков параметр ss одинаковый? Код: java 1.
Создается executor в ОДИН поток, потом какое-то непонятное шаманство с countYader. Что такое и зачем CountDownLatch мне даже представить сложно, я с таким не сталкивался. JavaDocnewFixedThreadPool(int nThreads) Creates a thread pool that reuses a fixed number of threads operating off a shared unbounded queue. Скорее должно быть что-то наподобии, в countYader обрабатываем поштучно строки из коллекции ss (правильность синтаксиса не гарантирую) Код: java 1. 2. 3. 4.
IMHO могу ошибаться ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 15:26 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Опять любитель асинхронности не может внятно рассказать чем занято два ядра процессора В ЕГО КОДЕ. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 15:28 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Не нравится мне эта мапа. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Зачем ее передавать в каждый поток если нас не интересует никакое промежуточное состояние мапы аж до финала процесса. Мы можем возвращать временную мапу в конце каждого потока (в виде Callable) и таким образом убираем лишний объект синхронизации. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 16:02 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Это тоже не надо. Код: java 1.
Когда реализуешь callable - там будет нормальный барьер ожидания финала всех рабочих futures.get ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 16:04 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Код: java 1. 2.
Тут - вообще непонятно какая ставится цель. Цель обычно - не грузить процессор а быстро закончить бизнес-процесс. Чтоб его быстро закончить надо не просто что-то там параллелить а понять где не самом деле узкое место. Код: java 1.
Не буду спорить по поводу чего там можно делить или нет. Но в первую очередь надо понять профиль нагрузки. Что узкое место. Вычисления. Или сеть. Или диск. В случае ноутбучного диска - увеличивать число тредов - бесполезно. Станет только хуже. Есть роскошный плакат который нарисовал Шипилев. https://shipilev.net/talks/devoxx-Nov2012-perfMethodology-mindmap.pdf Там есть гипотезы по нагрузке - и им соответсвтующие утилиты которые проверяют действие этих гипотез. Бери плакат и смотри на своё приложение через эти знания. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 16:21 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
всем огромное спасибо. вопрос решился. просто порезала сет на куски и каждый отправила в свой thread. может не красиво, но помогло :) авторТут - вообще непонятно какая ставится цель. Цель обычно - не грузить процессор а быстро закончить бизнес-процесс. Чтоб его быстро закончить надо не просто что-то там параллелить а понять где не самом деле узкое место. скорость обработки данных меняется же )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 17:39 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
Экстремум нашла? При каком числе newFixedThreadPool(...) время минимально? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 17:42 |
|
Помогите пожалуйста размногопоточить процесс
|
|||
---|---|---|---|
#18+
x2 от кол-ва ядер хорошо идет. но это не точно. надо исследовать) Но уже гораааааздо лучше чем было :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2021, 17:48 |
|
|
start [/forum/topic.php?desktop=1&fid=59&tid=2120354]: |
0ms |
get settings: |
22ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
237ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 360ms |
0 / 0 |