前段时间在讲IO进程这门课时,想到在进程中可以创建线程,那一个进程多可以创建多少个线程呢?于是我用下面的代码做了验证:
经过编译运行得到的结果是:n = 382,通过验证结果可以看到:一个进程多可以创建382个线程,按照进程的用户空间3g来算,每个线程开辟的堆栈空间大概为8M,(也可以通过命令ulimit –s来查看线程栈大小,以 Kbytes 为单位。)它的空间是不会被回收的,跟函数不同(线程相当于函数,但这里是跟函数的不同),所以这就需要我们人为的去回收。当在线程中创建大小为9M的数据时,会出现段错误。
那么问题又来了,每个线程创建的这8M的空间可以修改吗?如何修改呢?
显而易见,答案是肯定的,那怎么修改呢?我通过下面的代码进行了修改:
在函数pthread_attr_setstacksize中可以根据自己的需求修改线程的堆栈空间大小。