Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Счетчики / 8 сообщений из 8, страница 1 из 1
13.10.2014, 18:07
    #38775503
Caboforge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
Всем привет!
Я малость продвинулся в изучении многопоточности.

Возник уже наверное архитектурный вопрос.

Есть массив объектов типа MainStruct.
В MainStruct есть массив объектов типа SubStruct и каунтеры подсчитанные в результате обработки массива.
Т.е. в моем приложении MainStruct запускает обработку каждого SubStruct в отдельном потоке и каждый поток должен обновлять каунтеры в MainStruct. Каунтеры передаются в потоки через конструктор.
На сколько я понял, каунтеры(int) лучше определять как AtomicInteger.
Каунтеров порядка 10 штук.

Но рядом с каунтерами у MainStruct есть некий лог работы потоков типа StringBuffer. Он так же передается через конструктор в поток.

Вопросы:
1)Как лучше передавать эти 10 каунтеров и лог?Правильно ли что я передаю их в поток через конструктор?
2)В каком виде лучше передавать эти ссылки?Параметрами в конструкторе?Может создать отдельный класс с передаваемой структурой и передавать ее?Или может можно передавать ссылку на объект MainStruct и в дочерних потоках обновлять его счетчики обращаясь прямо к нему?

Всем большое спасибо!!
...
Рейтинг: 0 / 0
13.10.2014, 19:21
    #38775561
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
Caboforge,

1 ссылка в параметрах конструктора занимает меньше места в стеке, чем 10.
Но потребуется на 10 косвенных обращений больше.
Но поскольку это один и тот же кусок памяти, то скорее всего из кеша не будет вымываться и скорость даже подрастет.
Но с другой стороны это могут оказаться разные ядра.

А, вообще, если не планировать генерировать по тысячи потоков в секунду, то какая разница?
...
Рейтинг: 0 / 0
13.10.2014, 19:41
    #38775578
Caboforge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
Сергей Арсеньев,

Спасибо!
Я учусь и пытаюсь понять как правильно.
Хочу понять как быть в ситуации когда есть много ядер и процессоров.
Как я понял, тут разница разве что во внешнем виде кода ?

А есть ли разница между тем создавать ли специальную структуру или просто объявить счетчики в основном классе и передать на него ссылку?
...
Рейтинг: 0 / 0
14.10.2014, 08:55
    #38775817
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
CaboforgeА есть ли разница между тем создавать ли специальную структуру или просто объявить счетчики в основном классе и передать на него ссылку?
Одним классом меньше. :)
...
Рейтинг: 0 / 0
14.10.2014, 09:31
    #38775841
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
Caboforge,

По-моему Шипелев писал статью на эту тему. Искал он самый оптимальный способ вести подсчет из нескольких потоков. Даг Ли, если не ошибаюсь, ответил что достаточно тупо выдать каждому потоку свой не синхронизированый счетчик и лишь по завершении потоков безопасно просуммировать результаты.

Так что самое оптимальное решение синхронизации это свести борьбу за ресурсы к необходимому минимуму.
...
Рейтинг: 0 / 0
14.10.2014, 09:36
    #38775845
Caboforge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
Blazkowicz,

Спасибо!
Т.е. если считать по в каждом потоке отдельно, а после суммировать, то нужно создавать Callable потоки и возвращать результат?
...
Рейтинг: 0 / 0
14.10.2014, 09:43
    #38775849
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
CaboforgeТ.е. если считать по в каждом потоке отдельно, а после суммировать, то нужно создавать Callable потоки и возвращать результат?
Ну, как вариант.
...
Рейтинг: 0 / 0
14.10.2014, 12:09
    #38776038
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счетчики
Blazkowicz что достаточно тупо выдать каждому потоку свой не синхронизированый счетчик и лишь по завершении потоков безопасно просуммировать результаты.
Естественно, при условии, что завершение работы не зависит от значений счетчиков (ну и прочей конкуренции).

Грубо говоря, если надо просуммировать сколько раз встречается слово в N текстах, То лучше будет считать по отдельности.
Если же надо определить, встречается ли оно 10 раз, то возможно будет эффективней не проверять все до конца.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Счетчики / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]