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