Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> максимальное кол-во потоков (соединений) 
V
    Опции темы
CSharpProgrammer
Дата 20.6.2012, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.7.2006

Репутация: нет
Всего: нет



Доброго времени суток.

Задача такая, многопоточная закачка файлов из интернета (один пото - один файл). Так вот собственно интересует как можно проверить максимальное кол-во потоков (соединений), которое можно установить не в ущерб производительности?
PM MAIL   Вверх
Vasay
Дата 21.6.2012, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 3
Всего: 73



Цитата(CSharpProgrammer @  20.6.2012,  22:39 Найти цитируемый пост)
Доброго времени суток.Задача такая, многопоточная закачка файлов из интернета (один пото - один файл). Так вот собственно интересует как можно проверить максимальное кол-во потоков (соединений), которое можно установить не в ущерб производительности?



Понятие "ущерб производительности" весьма размыто. 

Максимально допустимое число открытых соединений зависит от настроек ОС.

Было время, писал я всякие парсеры на Java.  Обычно делал 300-600 потоков в зависимости от характеристик сервера. 

п.с. если выкачиваете текст, имейте ввиду, что stringBuilder рулит smile ( избегайте использование "+" в потоках при получении текстовых данных с сокета )

Это сообщение отредактировал(а) Vasay - 21.6.2012, 01:33


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
CSharpProgrammer
Дата 21.6.2012, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.7.2006

Репутация: нет
Всего: нет



Vasay
Цитата(Vasay @  21.6.2012,  01:32 Найти цитируемый пост)
Понятие "ущерб производительности" весьма размыто. 


Спасибо. Под понятием "ущерб производительности" я имел ввиду тот придел до которго увеличение потоков будет приводить к увеличению скорости работы парсера. Т.е. как я понял все упирается в настройки ОС и ширину канала?


PM MAIL   Вверх
Vasay
Дата 21.6.2012, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 3
Всего: 73



Цитата(CSharpProgrammer @  21.6.2012,  01:45 Найти цитируемый пост)
 Т.е. как я понял все упирается в настройки ОС и ширину канала?


И в то, что Вы делаете внутри потока. Я не просто так написал про "+" и stringBuilder  smile 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
CSharpProgrammer
Дата 21.6.2012, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.7.2006

Репутация: нет
Всего: нет



Цитата(Vasay @  21.6.2012,  01:48 Найти цитируемый пост)
И в то, что Вы делаете внутри потока.


Теперь все ясно. Спасибо за помощь!

П.С. А пример парсера случайно не сохранился?  smile 


Это сообщение отредактировал(а) CSharpProgrammer - 21.6.2012, 01:57
PM MAIL   Вверх
Vasay
Дата 21.6.2012, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 3
Всего: 73



Цитата(CSharpProgrammer @  21.6.2012,  01:55 Найти цитируемый пост)
П.С. А пример парсера случайно не сохранился? 


Выложить исходники я не могу, но готов ответить на конкретные вопросы. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
CSharpProgrammer
Дата 21.6.2012, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.7.2006

Репутация: нет
Всего: нет



Цитата(Vasay @  21.6.2012,  02:15 Найти цитируемый пост)
готов ответить на конкретные вопросы. 


Основной вопрос это как организована работа потоков в таком приложении (т.е. как правильно организовать). К примеру на входе 100К ссылок. В данный момент у меня реализована следующая архитектура

Код

public class DownloadThreadPoolExecutor extends ThreadPoolExecutor {

    ...

    public DownloadThreadPoolExecutor(int poolSize) {
        super(poolSize, poolSize, 9223372036854775807L, TimeUnit.SECONDS, new LinkedBlockingDeque());
        this.poolSize = poolSize;
    }

    public void start() {
        for (int i = 0; i < this.poolSize; i++) {
            submit(new DownloadThread(Producer.getInstance()));
        }
    }

    ...
}


И каждый поток берет у Producer свою порцию данных.

Так правильно? И какие варианты еще есть?

PM MAIL   Вверх
Vasay
Дата 21.6.2012, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 3
Всего: 73



Цитата(CSharpProgrammer @  21.6.2012,  02:39 Найти цитируемый пост)
Так правильно? И какие варианты еще есть?



Когда я начинал писать парсерный движок, ThreadPoolExecutor вроде еще не было (или я просто о нем знал на тот момент smile ). 

Потому делалось просто: из основного потока запускалось нужное количество потоков, потом основной поток в бесконечном цикле крутился, пока жив хотя бы один дочерний поток. 

Потоки за новыми данными обращались к synchronized методу. 

Сохранение данных шло разными путями, в зависимости от того, чего хотел добиться.  В самом нагруженном случае, каждый поток обрабатывал данные,  и результат обработки сохранялся (дописывал) в файл через synchronized метод использовавший единый для всех потоков BufferedWriter. Формат файла был предназначен для быстрой загрузки в базу с помощью LOAD DATA INFILE - это был самый быстрый способ загрузить данные в MySQL с построением индексов (нужен был быстрый поиск по текстовым полям в таблицах со 100мл записей).

Не уверен что это оптимальный вариант (тем более на сегодняшний день) Но это работало и работало быстро. 100 мегабитный канал сервера забивал. 



Это сообщение отредактировал(а) Vasay - 21.6.2012, 03:40


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
CSharpProgrammer
Дата 21.6.2012, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.7.2006

Репутация: нет
Всего: нет



Vasay

Спасибо за развернутый ответ. Тему можно закрывать.
PM MAIL   Вверх
Flashed
Дата 27.6.2012, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.6.2010

Репутация: нет
Всего: 1



Вообще, чтобы не завалить ОС,нужно использовать пул потоков. Сегодня защитил диплом на эту тему!!! 
Вот отличная статья: http://www.ibm.com/developerworks/ru/library/j-jtp0730/
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.