Linux中最多有多少程式?一個程式最多有多少執行緒?

hongmingover發表於2018-09-19

Linux中最多有多少程式?一個程式最多有多少執行緒?

我們都知道程式的概念,它是CPU分配資源的載體,是程式執行的例項;也知道執行緒的概念,它是程式執行的最小單元,是程式中的一個實體用來執行程式,一個程式中有多個執行緒。

既然如此,我們可以想象,一個系統中的程式數量肯定是有上限的,不然系統資源就會不夠用了,同樣的道理,一個程式中的執行緒資源也是有上限的。那程式和執行緒的上限到底是多大呢?

Linux中最多可以有多少個程式?

一.Linux中有一個命令可以幫助我們檢視系統中的程式上限

[pigff@izbp13yd4r85qvk53t04mbz ~]$ ulimit -u
4096

這屬於軟限制,是可以改變的。也就是說在我的機器上最多可以有4096個程式,但是我可以通過改變這個引數的值來修改對於程式數量的軟限制,比如說用下面的命令將軟限制改到5120。

 ulimit -u 5120

 二.我們用pid_t來表示一個程式的pid,因此能表示的程式的範圍一定不會超過pid_t型別的大小

[pigff@izbp13yd4r85qvk53t04mbz ~]$ cat /proc/sys/kernel/pid_max
32768

pid_t實際上就是一個short型別變數,當然這裡能表示的範圍只是程式id最多表示到這麼多,這只是一個理論值,實際上,由於記憶體等系統資源的限制,根本不會同時有這麼多的程式存在。

一個程式中最多可以有多少個執行緒?

在上一篇文章Linux中執行緒佔用記憶體中,我們知道了建立一個執行緒會佔用多少記憶體,這取決於分配給執行緒的呼叫棧大小,可以用ulimit -s命令來檢視大小(一般常見的有10M或者是8M)。我們還知道,一個程式的虛擬記憶體是4G,在Linux32位平臺下,核心分走了1G,留給使用者用的只有3G,於是我們可以想到,建立一個執行緒佔有了10M記憶體,總共有3G記憶體可以使用。於是可想而知,最多可以建立差不多300個左右的執行緒。

因此,程式最多可以建立的執行緒數是根據分配給呼叫棧的大小,以及作業系統(32位和64位不同)共同決定的

相關文章