|
|
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
Всем привет! Я малость продвинулся в изучении многопоточности. Возник уже наверное архитектурный вопрос. Есть массив объектов типа MainStruct. В MainStruct есть массив объектов типа SubStruct и каунтеры подсчитанные в результате обработки массива. Т.е. в моем приложении MainStruct запускает обработку каждого SubStruct в отдельном потоке и каждый поток должен обновлять каунтеры в MainStruct. Каунтеры передаются в потоки через конструктор. На сколько я понял, каунтеры(int) лучше определять как AtomicInteger. Каунтеров порядка 10 штук. Но рядом с каунтерами у MainStruct есть некий лог работы потоков типа StringBuffer. Он так же передается через конструктор в поток. Вопросы: 1)Как лучше передавать эти 10 каунтеров и лог?Правильно ли что я передаю их в поток через конструктор? 2)В каком виде лучше передавать эти ссылки?Параметрами в конструкторе?Может создать отдельный класс с передаваемой структурой и передавать ее?Или может можно передавать ссылку на объект MainStruct и в дочерних потоках обновлять его счетчики обращаясь прямо к нему? Всем большое спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 18:07 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
Caboforge, 1 ссылка в параметрах конструктора занимает меньше места в стеке, чем 10. Но потребуется на 10 косвенных обращений больше. Но поскольку это один и тот же кусок памяти, то скорее всего из кеша не будет вымываться и скорость даже подрастет. Но с другой стороны это могут оказаться разные ядра. А, вообще, если не планировать генерировать по тысячи потоков в секунду, то какая разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 19:21 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Спасибо! Я учусь и пытаюсь понять как правильно. Хочу понять как быть в ситуации когда есть много ядер и процессоров. Как я понял, тут разница разве что во внешнем виде кода ? А есть ли разница между тем создавать ли специальную структуру или просто объявить счетчики в основном классе и передать на него ссылку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2014, 19:41 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
CaboforgeА есть ли разница между тем создавать ли специальную структуру или просто объявить счетчики в основном классе и передать на него ссылку? Одним классом меньше. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 08:55 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
Caboforge, По-моему Шипелев писал статью на эту тему. Искал он самый оптимальный способ вести подсчет из нескольких потоков. Даг Ли, если не ошибаюсь, ответил что достаточно тупо выдать каждому потоку свой не синхронизированый счетчик и лишь по завершении потоков безопасно просуммировать результаты. Так что самое оптимальное решение синхронизации это свести борьбу за ресурсы к необходимому минимуму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:31 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо! Т.е. если считать по в каждом потоке отдельно, а после суммировать, то нужно создавать Callable потоки и возвращать результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:36 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
CaboforgeТ.е. если считать по в каждом потоке отдельно, а после суммировать, то нужно создавать Callable потоки и возвращать результат? Ну, как вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:43 |
|
||
|
Счетчики
|
|||
|---|---|---|---|
|
#18+
Blazkowicz что достаточно тупо выдать каждому потоку свой не синхронизированый счетчик и лишь по завершении потоков безопасно просуммировать результаты. Естественно, при условии, что завершение работы не зависит от значений счетчиков (ну и прочей конкуренции). Грубо говоря, если надо просуммировать сколько раз встречается слово в N текстах, То лучше будет считать по отдельности. Если же надо определить, встречается ли оно 10 раз, то возможно будет эффективней не проверять все до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38775561&tid=2126457]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 491ms |

| 0 / 0 |
