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);