![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Мне кажется что потоки, которые закончили свою работу не удаляются из памяти. Или происходит что-то подобное.
У меня есть база данный со списком URL'ов... Мне надо что бы по всем этим урлам прошлась бы моя прога и скачала их содержимое. Для каждого урл создается свой поток. Одновременно в памяти поддерживается 10 потоков. Если в винде открыть менеджер задач и смотреть на загрузку процессора и файл подкачки то проц загужен на 100%, а файл подкачки резко растет. И только растет. Новые потоки появляются все медленнее. комп начинает ужасно тормозить. Винда матерится на недостаток виртуальной памяти.. и чем больше URLов в базе тем хуже последствия. Если скачать по отдельности (без многопоточности) 200 файлов по их URL то это займет не так много времени... а с многопоточностьб занимает около часа на моем компе... Хочу понять как выбрасывать из памяти потоки, которые уе закончили свою работу
если запустить например когда в массиве штук 200 URL то этопочти смертельно для компа Это сообщение отредактировал(а) rcdimon - 24.4.2006, 07:34 |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Что-то мне подсказывает, что проблема вот в этом цикле.
Я же тебе ещё в прошлой теме написал, что нужно создать условие, по которому программа проверяла бы, завершил поток выполнение или нет, а так же пояснил почему это нужно делать. У тебя цикл на каждой итерации зависает в ожидании, пока поток соединится. ;))))) Вобщем создавай условие, что-то типа:
А так же, было бы не плохо синхронизировать потоки и давать возможность потоку поспать, хотя бы короткое время. Это сообщение отредактировал(а) korob2001 - 24.4.2006, 21:14 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Признаться четсно, суть понял, но как приминить не знаю
Каждый раз когда в коде встречается $th->done(); Он пишет done unimplemented with ithreads. И все равно ничего не меняется. Подскажи подробнее, пожалуйста Вот это тоже не понимаю >>А так же, было бы не плохо синхронизировать потоки и давать возможность потоку поспать, хотя бы короткое время. Зачем их синронизировать? Они занимаются закачкой файлов. Файлы по размером разные бывают и поэтому и потоки разное время работают. Или что значит синхронизировать? И зачем им спать? |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Например, когда ты зупускаешь бесконечный цикл, он у тебя может отобрать все ресурсы. Здесь по сути происходит тоже самое, только цикл у тебя не бесконечный, но у тебя их работает 10 одновременно. Причём потоки не сихронизированы, т.е. они грузят файлы в хаотичном порядке. Было бы не плохо, что бы каждый поток грузил файл определённое время, а затем засыпал на короткий промежуток времени и давал возможность другим потокам отработать своё время. У меня сейчас верисия Perl не многопоточная стоит, потому я не могу даже потестить. Если у тебя есть книга "Программирование на Perl", то почитай главу "Потоки", там очень кратко, но в то же время очень понятно написано всё, что нужно знать о многопоточном программировании на Perl. Эта книга уже есть в электронном виде, посмотри в разделе "Компьютерная литература"->"Perl". -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |