linux下創建1000個線程?

[問]

其實我遇到的問題是需要最多能夠創建1000個線程,但是現在這個還距離目標太遠了。具體應該怎麼修改,能否告訴我?謝謝了。


[答]

要創建1000個線程,可以先執行ulimit -s 2048。

這個問題要用程序的方法解決幾乎是不可能的。

因爲按RedHat Linux 9.0的posix線程實現,每個線程的父進程都是當前控制檯進程,而不是調用pthread_create的那個進程的。而另一方面,在一個進程中能創建的線程個數又主要受堆棧的限制:2G/允許的最大堆棧大小,在i386平臺上,控制檯進程默認的最大堆棧大小爲8M,所以能創建的線程數爲2G/8M = 256個。但是,這個8M的限制可以通過命令ulimit修改,從而間接地增大可創建的線程個數。

這樣,你的問題演化爲“能否通過程序去修改控制檯進程的最大堆棧大小參數?”。個人認爲這個通過常規方法很難做到。  

 

////////////////////////////////////////////////////////////////////////////////////////////////////////

 

ulimit

功能說明:控制shell程序的資源。

語  法:ulimit [-aHS][-c <core文件上限>][-d <數據節區大小>][-f <文件大小>][-m <內存大小>][-n <文件數目>][-p <緩衝區大小>][-s <堆疊大小>][-t <CPU時間>][-u <程序數目>][-v <虛擬內存大小>]

補充說明:ulimit爲shell內建指令,可用來控制shell執行程序的資源。

參  數:
  -a  顯示目前資源限制的設定。 
  -c <core文件上限>  設定core文件的最大值,單位爲區塊。 
  -d <數據節區大小>  程序數據節區的最大值,單位爲KB。 
  -f <文件大小>  shell所能建立的最大文件,單位爲區塊。 
  -H  設定資源的硬性限制,也就是管理員所設下的限制。 
  -m <內存大小>  指定可使用內存的上限,單位爲KB。 
  -n <文件數目>  指定同一時間最多可開啓的文件數。 
  -p <緩衝區大小>  指定管道緩衝區的大小,單位512字節。 
  -s <堆疊大小>  指定堆疊的上限,單位爲KB。 
  -S  設定資源的彈性限制。 
  -t <CPU時間>  指定CPU使用時間的上限,單位爲秒。 
  -u <程序數目>  用戶最多可開啓的程序數目。 
  -v <虛擬內存大小>  指定可使用的虛擬內存上限,單位爲KB。

修改ulimit 的參數

[root@web230 ~]# ulimit -n
1024

以修改 limit -n 爲例

vi /root/.bash_profile

填加 ulimit -HSn 10240 保存退出

source /root/.bash_profile

[root@web230 ~]# ulimit -n
10240

修改成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章