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

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

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

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

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

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

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

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

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

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

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

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

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

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


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