Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Покритикуйте плиз решение - многопоточность / 14 сообщений из 14, страница 1 из 1
05.03.2012, 13:30:15
    #37691458
roibush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
Есть громная строка, с которой надо сделать определенные манипуляции.
Так как строка огромная, то юзаем многопоточность. я делю строку на равные части и скармливаю
потокам на обработку. потом рез-ты обработки вставляю в StringBuffer, в той же последовательности как и отдавал потокам на обработку.
Юзаю StringBuffer, так как он потокобезопасный в отличии от StringBuilder.


Мой вопрос : По Вашему мнению правильный ли механизм я выбрал для сбора результирующих данных?
То есть правильно ли в контексте данной задачи использовать StringBuffer? Или есть более правильное или произвродительное решение для сборки данных, которые потоки обрабатывали паралельно?

Заранее спасибо!
...
Рейтинг: 0 / 0
05.03.2012, 13:36:12
    #37691466
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
Сколько у вас там потоков и как часто вы это планируете запускать, что вдруг сборка результатов стала узким местом?
Если со StringBuffer работает без ошибок, то решение - подходящее.
Можно ли быстрее? Скорее всего можно. Вопрос в том нужно ли?
...
Рейтинг: 0 / 0
05.03.2012, 13:43:25
    #37691480
OOsalivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
roibush,

все зависит рт манипуляций которые нужно сделать
...
Рейтинг: 0 / 0
05.03.2012, 13:51:16
    #37691503
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
roibushИли есть более правильное или произвродительное решение для сборки данных
не бить данные на куски, чтобы потом их собирать.
Если в памяти, то будет быстрее.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
05.03.2012, 14:44:45
    #37691639
roibush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
Всем спасибо за комментарии!

Скажите плиз, а если скажем потоки возвращали бы списки обработанных объектов, ну скажем какие-нибудь абстрактные списки заказов List<Order>. то технология сбора обработанных данных та же - самая? То есть ожидание пока все потоки вернут списки объектов? Или есть какая-нибудь продвинутая техника (специальный класс или еще что то), которая собирает у потоков рез-ты их работы?
...
Рейтинг: 0 / 0
05.03.2012, 14:48:09
    #37691645
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
...
Рейтинг: 0 / 0
05.03.2012, 14:52:07
    #37691656
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
roibush,
- процессор - 1, потоков - 100.
Результат будет медленнее, т.к. процессор всего - 1 (переключение контекста с потока на поток).
Остальное можно не мучить голову, т.е. искать нужно где потерял, а не где светло.
...
Рейтинг: 0 / 0
05.03.2012, 14:56:51
    #37691664
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
автор http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

ForkJoin конечно неплохая штука, но конкретно для этой задачи лучше использовать ExecutorService.newFixedThreadPool() вместе с Callable и Future, с ForkJoin стоит возиться если используется рекурсивный механизм.
...
Рейтинг: 0 / 0
05.03.2012, 14:59:20
    #37691672
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
Ну и да Petro правильно подметил - если процессор один то нет смысла возиться с многопоточностью, так как таски судя по всему computing-intensive, а вот если ядер хотя бы два - то таки лучше работать параллельно и задать количество потоков в newFixedThreadPool() равное количеству логических процессоров, из Java кода можно получить как Runtime.getRuntime().availableProcessors
...
Рейтинг: 0 / 0
05.03.2012, 14:59:22
    #37691673
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
Petro123roibush,
- процессор - 1, потоков - 100.
Результат будет медленнее, т.к. процессор всего - 1 (переключение контекста с потока на поток).
Остальное можно не мучить голову, т.е. искать нужно где потерял, а не где светло.
Процессор 1 - ядер много.
Если обработка включает IO операции, то процессор можно загрузить дополнительными операциями, на время простоя других потоков на IO.
...
Рейтинг: 0 / 0
05.03.2012, 15:00:45
    #37691674
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
забыл никНу и да Petro правильно подметил - если процессор один то нет смысла возиться с многопоточностью, так как таски судя по всему computing-intensive, а вот если ядер хотя бы два - то таки лучше работать параллельно и задать количество потоков в newFixedThreadPool() равное количеству логических процессоров, из Java кода можно получить как Runtime.getRuntime().availableProcessors
Если обработка данных исключает IO. Тогда так. Если присутствует работа с базой, сохранение на жесткий диск и т.п. то потоков можно больше запускать.
...
Рейтинг: 0 / 0
05.03.2012, 15:17:06
    #37691716
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
авторЕсли обработка данных исключает IO. Тогда так. Если присутствует работа с базой, сохранение на жесткий диск и т.п. то потоков можно больше запускать.

Да, я это и предполагал, вроде слышал что таски завязанные на IO называются IO-intensive, а завязанные на вычисления - compute-intensive, как-то не подумал что это может вызвать недопонимание
...
Рейтинг: 0 / 0
05.03.2012, 15:39:04
    #37691758
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
забыл никДа, я это и предполагал, вроде слышал что таски завязанные на IO называются IO-intensive, а завязанные на вычисления - compute-intensive, как-то не подумал что это может вызвать недопонимание
compute-intensive не обозначает абсолютного отсутствия IO.
...
Рейтинг: 0 / 0
05.03.2012, 16:16:01
    #37691833
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте плиз решение - многопоточность
авторЕсть огромная строка, с которой надо сделать определенные манипуляции .
а можно уточнить следующие моменты

1) насколько огромна строка
2) откуда она берется
3) куда потом кладется
4) что с ней программа делает?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Покритикуйте плиз решение - многопоточность / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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