OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 00:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Активные процедуры.
СообщениеДобавлено: Четверг, 03 Май, 2007 20:16 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Какое максимальное количество thread'ов (активных процедур) можно создать в ActiveBB ?
Является ли это ограничение жёстким/мягким ? Зависит от версии ОС или ещё то чего ?

Я запустил следующий тест: создаются N активных процедур с N очередями сообщений между ними, образующими цикл (ring). Каждый thread чего то посылает одному соседу и получает от другого через эти каналы.

Тест работает при N=500, а при N=600 валится, выскакивает окошко с сообщением:
OS Restrictions
Unable to create new thread because of operation system restriction.
Send your claims to operation system developers.

Нажимаю на OK, вылетает TRAP 100 в Kernel.cCreateTask.
Window Task Manager показывает: Threads=584. При закрытии ActiveBB'а, число Threads медленно уменьшается (-1 в сек).

Как мне кажется 500 активных процедур это слишком мало, можно ли что-то с этим сделать? Является ли поведение ActiveBB корректным?

Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 20:38 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Поведение:
Цитата:
OS Restrictions
Unable to create new thread because of operation system restriction.
Send your claims to operation system developers.

является корректным.

Это ограничение почему-то накладывается ОС. И данное сообщение - реакция АББ на это ограничение.

Чуть точнее ответит Илья, когда появится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 20:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Поведение с выбросом окна и трепом - корректно.
При определенном числе открытых хэндлов ОС на очередной CreateThread возвращает ошибку. В этот момент и вылетает окошко сообщения, а после закрытия модального диалога - откат по инварианту из cCreateTask.
На Windows 2000 Server потолок побольше - порядка 900 потоков, на Вин 2000 Проф - поменьше, порядка 400. На Линуксе, надо ожидать, будет тоже в районе 900.
Нужно больше? :-) Портирование Черного Ящика в Голубую Бутылку - вот она, наша надежда :-)
Ибо от мейнстрима гиперпараллельности не дождемся, у них просто фантазии не хватает, что можно писать столь сильно распараллеленный код. Абстракции Явы и Шарпа не тянут :-)

Поведение с остановкой объектов - если они не отрабатывают сигнал ShouldComplete, то остановка идет медленно... Среда выдает стоп-сигнал, ждет, убивает, дает сигнал следующему... Надо просто цикл переделать - чтобы сразу выдать всем сигнал, подождать и всех прибить махом...

В силу ряда причин с января активным ядром не занимался вообще. Скоро буду доделывать - и выпускать релиз. Кстати, будет open-source.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 20:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Борис Рюмшин писал(а):
Это ограничение почему-то накладывается ОС.


Наверное считается что в ОС предназначенной для домашнего/офисного использования столько много потоков не нужно. А кому нужно, пусть покупают серверную версию ОС уже за совершенно другие деньги :D :D :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 21:09 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
От как это так не надо? Как это так не надо в домашней ОС?
"Одна жена готовит, одна стирает, одна шьет, одна детей кормит..."
(С) БСП
:-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 21:37 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Что-то не вяжется...

Есть прога написанная на MFC (я её немного корректировал, используется для тестирования сервера на stress), так она создала 1000 thread'ов без проблем. TaskManager это подтвердил.
Правда на 2000 загнулась (TaskManager показал что создались только 1968).

Комп и ОС, разумеется, те же.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 21:47 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Не вяжется, потому что потолок в системе - не на сами потоки, а, видимо, на хэндлы объектов ядра.
А активные объекты кушают приличное количество хэндлов семафоров. Причем более одного на объект - еще и на каждый ожидающий объект, и т.п.
Вот прикиньте это количество - и понижение потолка вполне объяснится.

Я гарантирую одно - то, что в момент трепа 100 новый поток РЕАЛЬНО создать уже нельзя, CreateThread дает ошибку. А почему там он дает ошибку - нюансы поведения ОС.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 22:38 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Илья Ермаков писал(а):
...
Ибо от мейнстрима гиперпараллельности не дождемся, у них просто фантазии не хватает, что можно писать столь сильно распараллеленный код. Абстракции Явы и Шарпа не тянут :-)

Мэйнстрим, похоже, просто уверен, что те кому надо больше тупо создадут еще один процесс с виртуальной машиной Java в нём :) .
Илья Ермаков писал(а):
....
В силу ряда причин с января активным ядром не занимался вообще. Скоро буду доделывать - и выпускать релиз. Кстати, будет open-source.

Хм, а потом еще думать, как его интегрировать его с ядром BB1.6. :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 22:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Там в 1.6 в ядре не так много изменений...
Собственно, об соответствии 1.6 я буду думать сразу.
Кроме того... скажу по секрету, что ядро будет порезано :-) На части... Идем в сторону супермикроядерности :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 03 Май, 2007 23:17 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Там в 1.6 в ядре не так много изменений...
Собственно, об соответствии 1.6 я буду думать сразу.
Кроме того... скажу по секрету, что ядро будет порезано :-) На части... Идем в сторону супермикроядерности :-)

буду ждать появления целой подсистемы Kernel вместо одного файла?, авось тогда у меня хватит мозга чтобы в нем разобраться :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 04 Май, 2007 00:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да там все не так сложно... Я тоже долго боялся, прежде чем параллельность делать :-)

Кстати, к АктивББ прилагается полная документация на интерфейс ядра - все мои наблюдения...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 04 Май, 2007 01:11 
Аватара пользователя

Зарегистрирован: Воскресенье, 04 Декабрь, 2005 16:15
Сообщения: 15
Откуда: Украина, Мариуполь
Илья Ермаков писал(а):
Не вяжется, потому что потолок в системе - не на сами потоки, а, видимо, на хэндлы объектов ядра.
А активные объекты кушают приличное количество хэндлов семафоров. Причем более одного на объект - еще и на каждый ожидающий объект, и т.п.
Вот прикиньте это количество - и понижение потолка вполне объяснится.

Я гарантирую одно - то, что в момент трепа 100 новый поток РЕАЛЬНО создать уже нельзя, CreateThread дает ошибку. А почему там он дает ошибку - нюансы поведения ОС.


Здесь пишут, что причина в банальной нехватке адресного пространства:
http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx

И говорят, что можно увеличить кол-во потоков до 13000 если использовать:
HANDLE h = CreateThread(NULL, 4096, ThreadProc, NULL, STACK_SIZE_PARAM_IS_A_RESERVATION, &id);

Попробуете на досуге в Active BlackBox?

P.S.
Но есть ложка дёгтя:
Windows 2000/NT and Windows Me/98/95: The STACK_SIZE_PARAM_IS_A_RESERVATION flag is not supported.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 04 Май, 2007 01:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, спасибо за информацию, надо будет попробовать!
Мне сейчас гораздо интереснее, как это дело поведет в себя в Линуксе. На количество процессов в Линуксе потолок вроде бы 1000, но каков потолок на потоки...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 08 Май, 2007 12:42 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Кривохатько С.А. писал(а):
Но есть ложка дёгтя:
Windows 2000/NT and Windows Me/98/95: The STACK_SIZE_PARAM_IS_A_RESERVATION flag is not supported.

Вообще-то странно!
Я когда на QNX отлаживал свою многострадальную библиотеку активных объектов (а-ля Активный Оберон над Си++) - для отладки задавал десятки тысяч потоков...
Х-мммм....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 08 Май, 2007 16:13 
Аватара пользователя

Зарегистрирован: Воскресенье, 04 Декабрь, 2005 16:15
Сообщения: 15
Откуда: Украина, Мариуполь
Wlad писал(а):
Кривохатько С.А. писал(а):
Но есть ложка дёгтя:
Windows 2000/NT and Windows Me/98/95: The STACK_SIZE_PARAM_IS_A_RESERVATION flag is not supported.

Вообще-то странно!
Я когда на QNX отлаживал свою многострадальную библиотеку активных объектов (а-ля Активный Оберон над Си++) - для отладки задавал десятки тысяч потоков...
Х-мммм....


Адресное пространство для пользовательского режима в Win ограничено 2ГБ. Из-за особенностей реализации - минимальный размер одного куска из этих 2ГБ - 64КБ. Получается порядка 30000.
В QNX получается намного больше?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 08 Май, 2007 21:47 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Да, спасибо за информацию, надо будет попробовать!
Мне сейчас гораздо интереснее, как это дело поведет в себя в Линуксе. На количество процессов в Линуксе потолок вроде бы 1000, но каков потолок на потоки...

В свежих ядрах (если не ошибаюсь, с 2.4, а может и 2.2) на хранение идентификаторов процесса и потока стали отводить 4 байта вместо 2-х. Думаю слепить 65к потоков там уже не проблема.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 10 Май, 2007 10:14 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Кривохатько С.А. писал(а):
Адресное пространство для пользовательского режима в Win ограничено 2ГБ. Из-за особенностей реализации - минимальный размер одного куска из этих 2ГБ - 64КБ. Получается порядка 30000.
В QNX получается намного больше?

Число 30000 - это ОЧЕНЬ запредельно для винды. Впрочем - и для Линукса. Для QNX грубо можно оценить по перемножению системных ограничений (максимальные показатели) количество одновременно запускаемых процессов на максимальное количество потоков на один процесс. Это ОЧЕНЬ много. И самое приятное, что оно таки-да - будет выполняться! ОЧЕНЬ медленно (почти мёртво), но ВСЕ потоки гарантированно будут живыми и система не рухнет.
(Кстати, у меня полтора года комп с QNX просто не выключался и почти каждый день на нём отлаживались драйвера. Учтите - БЕЗ ПЕРЕЗАГРУЗКИ! :о)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB