前段時間在講IO進程這門課時,想到在進程中可以創建線程,那一個進程多可以創建多少個線程呢?于是我用下面的代碼做了驗證:
經過編譯運行得到的結果是:n = 382,通過驗證結果可以看到:一個進程多可以創建382個線程,按照進程的用戶空間3g來算,每個線程開辟的堆棧空間大概為8M,(也可以通過命令ulimit –s來查看線程棧大小,以 Kbytes 為單位。)它的空間是不會被回收的,跟函數不同(線程相當于函數,但這里是跟函數的不同),所以這就需要我們人為的去回收。當在線程中創建大小為9M的數據時,會出現段錯誤。
那么問題又來了,每個線程創建的這8M的空間可以修改嗎?如何修改呢?
顯而易見,答案是肯定的,那怎么修改呢?我通過下面的代碼進行了修改:
在函數pthread_attr_setstacksize中可以根據自己的需求修改線程的堆棧空間大小。