![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Thread creation error - Недостаточно памяти [D7, XP]
RealSwift © (2008-07-06 12:19:00)Доброе время суток.
Есть программа для многопоточного одновременного пинга компьютеров локальной сети. Запускается одновременно ~2000 потоков. Соответственно возвращается информация о наличии или отсутствии компьютера. Время отработки программы - 20 секунд. Все хорошо, однако после третьего цикла (т.е. три цикла программа отработала хорошо) - вылетает сообщение "Thread creation error - Недостаточно памяти". При этом слежу в диспетчере задач - память после отработки цикла освобождается, потоки исчезают.
FreeOnTerminate := true;
Как решить вопрос? Почему возникает?
Спасибо!
Тын-Дын (2008-07-06 14:40:00) [1]
> Игорь Шевченко © (06.07.08 14:34) [12]
>
> Врет автор насчет локальной сети. Он спамер
Совершенно не факт.
У меня тоже есть подобная задачка, только руки не доходят пока.
Игорь Шевченко (2008-07-06 14:34:00) [2]Врет автор насчет локальной сети. Он спамер
Тын-Дын (2008-07-06 13:49:00) [3]Кстати, это не исключает утечку памяти.
Но
> При этом слежу в диспетчере задач - память после отработки
> цикла освобождается, потоки исчезают.
Тын-Дын (2008-07-06 13:48:00) [4]
> Поросенок Винни-Пух © (06.07.08 13:46) [9]
>
> Головой подумай.
>
> Утечки памяти ни при чем.
>
> Сам подумай головой.
> Будь то правда, косяк вылез бы на первой итерации цикла,
> а не на третьей.
Не слушай автора. При запуске такого количества потоков он не сможет эти итерации определить. Система встанет раком, невохможно будет даже количество потоков, запущенных на данный момент, определить.
Система будет заниматься исключительно своппингом, автор будет смотреть и ждать, пока она отвиснет.
Поросенок Винни-Пух (2008-07-06 13:46:00) [5]Головой подумай.
Утечки памяти ни при чем.
Сам подумай головой.
Будь то правда, косяк вылез бы на первой итерации цикла, а не на третьей.
Тын-Дын (2008-07-06 13:45:00) [6]Кстати, попробуй, если интересно, создать ~2000потоков.
Тын-Дын (2008-07-06 13:43:00) [7]
> Где ты высосал цифру две тысячи?
Головой подумай.
PS.
Я знаю, что земля не круглая...
Поросенок Винни-Пух (2008-07-06 13:42:00) [8]Утечки памяти ни при чем.
2000.потоков*1Мб.стека=2Гб.памяти.
Вот и вся проблема.
Где ты высосал цифру две тысячи?
Запускается одновременно ~2000 потоков
Поросенок Винни-Пух (2008-07-06 13:40:00) [9]Утечки памяти ни при чем.
Будь то правда, косяк вылез бы на первой итерации цикла, а не на третьей.
Тын-Дын (2008-07-06 13:31:00) [10]Либо сделать потоки повторно используемыми в контексте задачи, либо контролировать их количество.
Мне представляется разумным ограничение в 50-100 потоков.
Тын-Дын (2008-07-06 13:29:00) [11]
> Поросенок Винни-Пух © (06.07.08 12:44) [1]
>
> Как решить вопрос? Почему возникает?
>
> Потому что утечки памяти
Утечки памяти ни при чем.
2000.потоков*1Мб.стека=2Гб.памяти.
Вот и вся проблема.
> RealSwift (06.07.08 13:09) [2]
>
> >>Винни-Пух
>
> А как решить?
Ограничиться разумным количеством потоков.
RealSwift (2008-07-06 13:09:00) [12]>>Винни-Пух
А как решить?
Поросенок Винни-Пух (2008-07-06 12:44:00) [13]Как решить вопрос? Почему возникает?
Потому что утечки памяти есть