Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: vbi от Август 05, 2013, 11:51



Название: Как проверить сколько можно запустить параллельных потоков?
Отправлено: vbi от Август 05, 2013, 11:51
Есть многопоточная программа. На 20 потоках работает без проблем.
Но если ограничение поставить 500, тогда программа сразу же вылетает с ошибкой Runtime error.

(http://f4.s.qip.ru/eLukkPIM.png)

Runtime error вылетает всегда на коде QString::mid().

Проверял, параметры передаются туда правильно. Очевидно не хватает памяти приложению?

Так же окно вывода приложения выводит следующее:
Код:
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Пробовал ловить в try, но Эта ошибка не ловится.

P.S. Если поставить не 500 а 200 потоков, то приложение всеравно отваливается, но уже через пол часа работы.

В чем может быть проблема?


Название: Re: Как проверить сколько можно запустить параллельных потоков?
Отправлено: Bepec от Август 05, 2013, 12:06
Максимальное число потоков определяется системой. Максимальное число потоков на моём i3 - 61.


Название: Re: Как проверить сколько можно запустить параллельных потоков?
Отправлено: Old от Август 05, 2013, 12:09
Максимальное число потоков определяется системой. Максимальное число потоков на моём i3 - 61.
Я бы сказал, что это больше от количества оперативной памяти зависит, нежили от процессора.


Название: Re: Как проверить сколько можно запустить параллельных потоков?
Отправлено: vbi от Август 05, 2013, 12:56
Тогда как определить это и избавится от ошибки?


Название: Re: Как проверить сколько можно запустить параллельных потоков?
Отправлено: Igors от Август 05, 2013, 13:53
P.S. Если поставить не 500 а 200 потоков, то приложение всеравно отваливается, но уже через пол часа работы.

В чем может быть проблема?
Посмотрите расход памяти на старте и через полчаса - выглядит как утечка в каждой нитке. А вообще 500 - не ускорение а наоборот, ядра-то не вырастают, а время на переключение тратится


Название: Re: Как проверить сколько можно запустить параллельных потоков?
Отправлено: vbi от Август 05, 2013, 14:10
Хорошо, спасибо. Ставлю виртуальную машину и Ubuntu. Буду валгриндом проверять.