|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
здравствуйте! собственно сабж, увеличивается количество потоков на 120, и изза этого через некоторое время работы комп зависает... как правильно завершить потоки? задача такая: при запуске проекта: а) запускается сервис Read а.1. в свою очередь СервисРидер запускает ВотчерСервис и прослушивает указанную директорию (тут вроде все нормально и компьютер загружается) б) и если в часах минуты кратные на 5 (-1) запускаем сервис Write б.1. должен на указанную папку записать 120 файлов при этом по 24 файлов с задержкой 0,5сек и по окончанию 24 пауза на 10сек и дальше, а по окончанию всех 120 задержка на 5 минут вот собственно листинг: Код: 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.
Райтер Код: 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. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156.
Ридер думаю нет необходимости :) и в ВижуальВМ получил вот такую картину... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 15:06 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
есть предложения по оптимизации? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 17:34 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
Больше экзекьюторов! И чем они singleThreaded тем лучше )) С глобальной точки зрения, предложения по оптимизации такое - выкинуть и переписать заново, перед этим переосмыслив задачу. С локальной точки зрения, чтобы уйти от +120 потоков каждые 5 минут, то надо либо не пересоздавать WriterService каждые 5 минут опять же, либо заменить Код: java 1. 2. 3.
на Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 17:46 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
и не забывать делать экзекьюторам shutdown когда они отработали ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 17:47 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
Я сразу скажу что я твой код не смотрел детально. Музаффарздравствуйте! собственно сабж, увеличивается количество потоков на 120, и изза этого через некоторое время работы комп зависает... 120 здесь непричем. Бывало и стократно больше и приложение нормально работало. Вообще мне вспоминается лекция Шипилева на тему перформанса где приводится пример утилизации ресурсов. Сжигается целый лес древесины чтобы согреть чайник чая. Вобщем это приложение похоже сжигает лес. Убежден что задачу файловых операций можно решить дешевле. Другое дело - какое задание ставил препод и ЧТО надо было продемонстрировать в приложении? Какие технологии? Хотел препод чтоб просто файлы записались? Это вообще быстрее сработает в одном потоке для вашего ноутбука. Хотел чтоб жгли лес? Ну ОК. как правильно завершить потоки? Только тот кто писал код - знает как корректно завершить. Корректно - это не kill -9 а просто поставить булевый флажок в тело цикла и если флаг установлен то - выйти из главного цикла. Это мягкий и безопасный способ. Остановить threadpool executor всегда можно. Но при этом остаётся за кадром вопрос - что будет с состоянием потоков которые писали в файл и что будет в этом файле? Руины. Тоесть - это up to you. Вы сами должны знать точку во времени где у вас все потоки завершены. Архитектурно - наверное лучше не потоки а Callable чтоб фиксировать финиш последнего. По поводу Thread.sleep. Я чето вспомнил что мы на проекте везде позаменяли его на LockSupport.parkNanos и parkUntil. Сейчас не могу вспомнить зачем. Надо почитать и вспомнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 23:02 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
Вроде есть разница в утилизации потока между сред.слип и уиелд. А вообще дайкстра вроде ещё сказал что бездумно раскидывать на потоки алгоритм весьма неэффективно и если 2 потока работают быстрее чем 1 то 5 потоков не факт что быстрее чем 2. А 10 потоков уже могут и медленнее одного тянуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 23:46 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
А Дейкстра предложил что-то вместо потоков? В современном браузере например. Там - много задач которые создают иллюзию параллельной работы. Как их кодить? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 23:56 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
maytonА Дейкстра предложил что-то вместо потоков? В современном браузере например. Там - много задач которые создают иллюзию параллельной работы. Как их кодить? это воркеры ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 07:04 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
это точно подогреть чайник - спалить пол леса. тут имхо и статичного пула с 10 потоками хватит отчего же приложение то валится? может по памяти ? может memoryawarethreadpool что бы угомотить вакханалию ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 07:23 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
Нет. По памяти у него 128 м выделено и всего хватает. Там если по вкладкам поклацать будет диаграмма активности потоков. Я бы глянул сколько их и какого цвета полоска. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 07:32 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
Да что тут обсуждать, 5 минут хватило чтобы понять что он каждые 5 минут пересоздание writerservice, внутри которого он делает scheduleatfixedrate() таким образом каждые 5 минут число потоков прирастает на 120 и все они продолжают писать в одно место в файловой системе, конечно оно на io и синхронизации потоков и загибается ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 10:43 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
maytonА Дейкстра предложил что-то вместо потоков? В современном браузере например. Там - много задач которые создают иллюзию параллельной работы. Как их кодить? я не совсем понял вопроса, ну думаю, в несколько потоков это ж очевидно )) просто в рамках разумного зачем фигачить 120+ потоков которые всё-равно делают ИО и там всё-равно всё синхронно? да даже без ИО. а да.. у меня был как то кейс, где екзекьютор стартовал несколько задач внутри каждой из которых был екзекьютор который стартовал несколько задач, внутри каждой из которых был.... эээ нувыпонели. и да... оно не работало. в смысле, оно не работало нормально, т.е. часть потоков просто стакало во всяких неожиданных местах, при том что взаимных блокировок не было. а агент показывал раннинг. вообще какая то дичь происходила, ну у меня просто компетенции не хватило разобраться. решили просто, выкинули всё это ужасное дерево и оставили только то количество потоков которое было равно количеству ядер на хосте, остальные ждали своей очереди -- заработало. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 11:56 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
ну вот после шатдауна получаю такую картину... хотя надо все таки оптимизировать т.к. понял что там можно сделать чуть по другому, на работе сначала запущу как там будет вести себя измененный код потом посмотрим кстати за подсказки спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 13:43 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
andreykaTрешили просто, выкинули всё это ужасное дерево и оставили только то количество потоков которое было равно количеству ядер на хосте, остальные ждали своей очереди -- заработало. Формула количество ядер==количество потоков справедлива только для процессов которые грузят CPU. Яркий пример - бенчмарк с рисованием трехмерных шаров. Если у вас - больше waits, которые ожидают I/O тогда количество потоков можно увеличивать. С другой стороны там тоже есть точка экстремума где пропускная способность приложения сначала растет а потом снижается. Найти эту точку - большое искусство. Но я еще раз подчеркну что это не всегда число тредов. Возьмите любое крупное java-приложение и сделайте thread-dump к примеру. 90% потоков стоят в ожиданиях. И если вы для них сделаете 4-8 тредов на пул то получите просто неэффективное приложение. Кстати еще поинт - создавать множество пулов и группировать их по роду задач. DBMS - один пул. Rest - другой. Или если Rest делится по внешним интерфейсам - то еще делить дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 14:03 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
совершенно согласен. многопоточка это вообще очень много если если то если сё если там если тут. и адекватно спланировать и сбалансировать потоки это отдельная олимпиада. но в целом, в совсем сферическом вакууме прирост производительности от количества потоков далекооооо не линейный. я не говорю что надо на 8 потоков зарезать всё приложение и всё, но на играющих потоках я не вижу смысла иметь сильно больше количества виртуальных ядер. да и то - если ты сможешь распределить адекватно нагрузку. сугубо имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 14:21 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
Многопоточное приложение позволяет написать однотопоточный код и масштабировать его на сотни и тысячи клиентов. В подавляющем большинстве случаев разница будет не между "эффективно - неэффективно", а между "уже работает" и "невозможно сделать в разумные сроки". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 08:57 |
|
увеличивается количество потоков
|
|||
---|---|---|---|
#18+
вадяmaytonА Дейкстра предложил что-то вместо потоков? В современном браузере например. Там - много задач которые создают иллюзию параллельной работы. Как их кодить? это воркеры Логическое развитие этого вопроса я надеялся получить здесь 21703023 . К сожалению после закрытия "сами-знаете-какого форума" - крокодил не ловится и не растет кокос да и вообще в форуме остались студенты которым нужен зачот. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 13:50 |
|
|
start [/forum/topic.php?fid=59&msg=39717025&tid=2121715]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 288ms |
0 / 0 |