Question
一个进程中能够产生的最多的线程个数?
create
- 测试数量上限,不考虑内存泄漏(无join)
- 确定栈是独立的,在线程函数中打印变量地址.相差kstacksize大小左右,可以使用命令
pmap查看 - 先耗尽 pid
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
static void *func(void *p)
{
int i;
&i
while(1)
pause();
pthread_exit(NULL);
}
int main()
{
int i;
pthrad_t tid;
for(i=0;;i++)
{
err=pthread_create(&tid,NULL,func,NULL);
if(err)
{
fprintf(stderr,"pthread_create():%s\n",strerror(err));
break;
}
}
printf("%d\n",i);
exit(0);
}-
线程间通信更快,共用同一块进程地址空间,进程间通信要借助第三方通信机制(管道,共享内存,消息队列),线程通信:一个全局变量,共享数据。创建线程是在当前进程空间内扔出去一个函数,创建进程fork,相当于memory copy,即使COW,还是要搭一个c的虚拟空间出来。量化,效率高多少?差距?
-
加属性
//定义变量
pthread_attr_t attr;
//初始化
pthread_attr_init(&attr);
//设置栈空间大小 1M
pthread_attr_setstacksize(&attr,1024*1024);
for(i=0;;i++)
{
//创建线程时让属性生效
err=pthread_create(&tid,&attr,func,NULL);
}
printf("%d\n",i);
pthread_attr_destroy(&attr);
exit(0);