Andrew V.Statsenko wrote:
> В Чтв, 15/11/2007 в 18:09 +0300, Dmitry Akindinov пишет:
>> Здравствуйте,
>> В линуксе по умолчанию процесс ограничен 1024 тредами, а в CGPro каждое >> активное сетевое соединение отрабатывается отдельнымтредом. Поэтому, >> когда тредов. отрабатывающих SMTP, становится слишком много, у процесса >> могут начаться проблемы с созданием тредов для отработки запросов по >> другим протоколам.
libpthread выделяет под каждый тред стек. И все эти стеки размещаются в одном адресном пространстве -- адресном пространстве процесса. Собственно вызов pthread_create() и создаёт стек для запускаемого треда. Если в вызов pthread_create() не было передано атрибута, задающего размер стека, pthread_create() использует размер по умолчанию. Например, на RHEL3 это 10M. При использовании стека по умолчанию создать в одном процессе больше 3G/10M=~3K тредов не получится. Если хочется много редов, надо задавать размер их стеков с помощью pthread_attr_setstacksize(). Делает ли это Communigate для Linux? Можно попробовать посмотреть с помощью pmap (у меня нет Communigate поэтому на примере произвольного многотредового процесса):
# pmap 15168
15168: cbs_ppssg
Start Size Perm Mapping
[...skip shared libraries...]
08048000 92K r-xp /opt/CBOSSip/CBSppssg/sbin/cbs_ppssg 0805f000 4K rw-p /opt/CBOSSip/CBSppssg/sbin/cbs_ppssg 0948c000 256K rw-p [ anon ] b524c000 4K ---p [ anon ] | b524d000 64K rw-p [ anon ] + стек 64K #1 b525d000 4K ---p [ anon ] | b525e000 64K rw-p [ anon ] + стек 64K #2 b526e000 4K ---p [ anon ] b526f000 6216K rw-p [ anon ] b5881000 4K ---p [ anon ] | b5882000 10240K rw-p [ anon ] + стек 10M #3 b6282000 4K ---p [ anon ] | b6283000 64K rw-p [ anon ] + стек 64K #4 b6293000 4K ---p [ anon ] | b6294000 19800K rw-p [ anon ] + heap b75f5000 4K rw-p [ anon ] bfff6000 40K rw-p [ stack ] + стек главного тредаmapped: 42528K writeable/private: 37072K shared: 0K
В процессе несколько тредов со стеками по 64K и один со стеком 10M. Видимо, код создания этих тредов был написан разными разработчиками -- один указал размер стека 64K, другой не указал, и стек был создан с размером по умолчанию. Получено Fri Nov 16 07:49:21 2007
Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:15:52 MSK