![]() |
|
Модераторы: gambit |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
Сделал многопоточный граббер. Каждый поток оформил в виде динамически создающегося BackgroundWorker-а. То есть, в программе создаётся множество таких объектов. У каждого потока сделал свой HttpWebRequest и HttpWebResponse.
Но почему-то многопоточность не даёт никакого толку. То есть, замеряемая скорость скачивания не увеличивается с увеличением числа потоков (и даже немного уменьшается). То есть, такое впечатление, что есть какой-то единственный общий ресурс, который разделяется потоками. Что это за ресурс? Как его найти? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
Dims, а с чего вдруг многопоточность должна давать прирост в скорости скачки? ) вроде как ширина интернет-канала остаётся неизменной при любом количестве потоков
-------------------- СУВ, Partizan. |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
Есть такие широко известные программы, как Reget или Teleport и их аналоги. Все они используют многопоточность и дают значительный прирост в скорости скачивания засчёт неё. Я не знаю точно, почему это происходит.
Скажем так, если мой граббер запустить несколько раз, то есть, чтобы было, скажем, 20 приложений по 1 потоку в каждом, то скачивание происходит быстрее, чем если запустить одно приложение с 20 потоками. Почему? Где узкое место? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
Dims, а что...отследить последовательность выполнения потоков никак?
з.ы. При отсутствии исходников, а также прокаченных навыков телепатии, на такой вопрос ответить, мягко говоря, сложновато -------------------- СУВ, Partizan. |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
||||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
Dims, например можно выводить в окно Output через Debug.Write время, когда поток стартует.
-------------------- СУВ, Partizan. |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
Вот таким кодом я запускаю грабберы:
По какой-то причине сообщения об их запуске приходят последовательно, примерно раз в секунду. Почему? Казалось бы, все грабберы должны начинать работать параллельно и почти одновременно? |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
Я нашёл причину того, что мои треды работали медленнее. Действительно, существует разделяемый ресурс -- максимальное количество соединений. Его можно настраивать в конфигурационном XML файле программы. Моё множество тредов пользовалось ограниченным небольшим количеством соединений, в результате, большую часть времени треды ждали, пока освободится соединение. Это и приводило к задержке.
|
|||
|
||||
| andrey_pro |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 21.9.2007 Репутация: нет Всего: нет |
а можно поподробнее
что за конфигурационный файл XML, где он, что именно настраивать? |
|||
|
||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
Есть такая штука "Application Configuration file"
Чтобы её добавить в проект, видимо, надо сделать Project | Add New Item | Application Configuration file Это будет XML файл, который можно редактировать в обычном текстовом редакторе. XML файл состоит из вложенных друг в друга гнёзд, ограниченных тегами, примерно, как HTML. По умолчанию, в новом файле создаётся гнездо
я в это гнездо, помимо тех элементов, которые там у меня уже были, добавил ещё и
этот элемент управляет свойствами библиотеки System.Net, а подэлемент connectionManagement управляет пулом соединений, который, видимо, библиотека поддерживает для программы. В данном случае я говорю, что для всех сайтов разрешить максимально 1000 соединений. В моём случае этот файл должен был находиться в той же папке, что и EXE-шник. Наверное, для ASP и других случаев могут быть другие варианты. Я нашёл на каком-то англоязычном форуме указание на ситуацию, аналогичную моей. Там была ссылка про это. И я почитал хелп, там целая куча всяких таких настроек. Не знаю, можно ли то же самое сделать из кода программы при выполнении. Добавлено через 5 минут и 3 секунды P.S. Скорость работы совершенно чётко возросла примерно в 10 раз, по объективным измерениям. От этого у меня даже часть, которая подаёт данные, стала работать гораздо быстрее треда, который их кушает (кладёт в базу данных), что привело к проявлению других багов, которые я первоначально не учёл. |
||||
|
|||||
| andrey_pro |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 21.9.2007 Репутация: нет Всего: нет |
спасибо
очень информативно |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 2 Всего: 11 |
Тады залепите мне плюс
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |