tthread, не получается запустить больше ~120 нитей

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

fpc создает потоки средствами APIWin Delphi тоже, но в Delphi до 1000 нитей без проблем.
где это ограничение в FPC, просмотрел исходники по диагонали, ограничения не нашел...

не вижу ничего зазорного в использовании большого (120+) количества нитей приложением, хватало бы ресурсов системы...
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

может кто собирёт под delphi простой пример использующий более 100 нитей(потоков) :?:
Будет время "поковыряю" OllyDbg :idea:
PS: просьба перед создание потока(ов) вызвать MessageBoxA(чтобы сразу найти нужное место :) )
про исходники тоже не забываем :roll:
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Если сервер реализует свой обмен данными поверх "чистого" tcp - то вообще непонятно, зачем весь сыр-бор с нитями, чтобы ожидать ответа от sql сервера? Уж увольте, лучше было бы сделать обычный диспетчер очереди запросов к БД, а нити "сэмулировать" в асинхронном режиме, не замучивая менеджер памяти потокобезопасными методами.
Не забывайте - ObjectPascal-подобные системы (в том числе C# :) ) поддерживают динамические массивы записей произвольной структуры и объема. Вам, фактически, не нужен стек под каждую "нить", просто добавляйте в динамический массив еще одну запись при подключении пользователя. А дальше стройте все на обработке TServerSocket-событий.
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Да, ситуация непонятная. Под Delphi запускается сколько хочешь потоков (пробовал до 1000) под FPC - 120 и все, ошибка с кодом 8.
Возможно, это как то связано с реализацией threadvar переменных в FPC?...
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

в delphi размер стэка приложения, по-умолчанию, равен 1 мегабайт.

поставьте такой же при компиляции FPC

Код: Выделить всё

-Cs1048576

будем вам счастье! (в Лазаре: Compiler Options->Other->Custom Options)
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

скалогрыз писал(а):в delphi размер стэка приложения, по-умолчанию, равен 1 мегабайт.

поставьте такой же при компиляции FPC

Код: Выделить всё

-Cs1048576

будем вам счастье! (в Лазаре: Compiler Options->Other->Custom Options)


Спасибо
Ответить