Linux nemá samostatná vlákna na limit procesu, pouze limit celkového počtu procesů v systému (vlákna jsou v podstatě jen procesy se sdíleným adresním prostorem v Linuxu), který můžete zobrazit takto:
cat /proc/sys/kernel/threads-max
Výchozí je počet stránek paměti/4. Toto můžete zvýšit takto:
echo 100000 > /proc/sys/kernel/threads-max
Existuje také omezení počtu procesů (a tedy vláken), které může vytvořit jeden uživatel, viz ulimit/getrlimit
podrobnosti o těchto limitech.
To je NESPRÁVNÉ tvrdit, že LINUX nemá samostatná vlákna na limit procesu.
Linux nepřímo implementuje maximální počet vláken na proces!!
number of threads = total virtual memory / (stack size*1024*1024)
Počet vláken na proces lze tedy zvýšit zvýšením celkové virtuální paměti nebo zmenšením velikosti zásobníku. Přílišné snížení velikosti zásobníku však může vést k selhání kódu v důsledku přetečení zásobníku, zatímco maximální virtuální paměť se rovná odkládací paměti.
Zkontrolujte svůj počítač:
Celková virtuální paměť:ulimit -v
(výchozí nastavení je neomezené, takže pro zvětšení musíte zvětšit odkládací paměť)
Celková velikost zásobníku:ulimit -s
(výchozí je 8 Mb)
Příkaz ke zvýšení těchto hodnot:
ulimit -s newvalue
ulimit -v newvalue
*Nahraďte novou hodnotu hodnotou, kterou chcete zadat jako limit.
Odkazy:
http://dustycodes.wordpress.com/2012/02/09/increating-number-of-threads-per-process/
V praxi je limit obvykle určen prostorem zásobníku. Pokud každé vlákno získá zásobník o velikosti 1 MB (nepamatuji si, zda je to výchozí nastavení v Linuxu), pak vám 32bitovému systému dojde po 3000 vláknech adresní prostor (za předpokladu, že poslední gb je rezervován pro jádro) .
Pokud však použijete více než několik desítek vláken, s největší pravděpodobností zažijete hrozný výkon. Dříve nebo později dostanete příliš mnoho režie přepínání kontextu, příliš mnoho režie v plánovači a tak dále. (Vytvoření velkého počtu vláken znamená o něco víc, než že spotřebuje spoustu paměti. Ale spousta vláken se skutečnou prací to vás zpomalí, protože bojují o dostupný čas CPU)
Co děláte, když je tento limit dokonce relevantní?