为什么pthread_create会占用如此多的VIRT
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2664 root 16 0 11792 420 336 S 0.0 0.2 0:00.00 example1
上面是我用top看到的!VIRT 代表什么啊?是虚拟内存的意思吗?为什么pthread_create会占用如此多的VIRT ,请各位大虾指教!
下面是我的代码:
#include <stdio.h>
#include <pthread.h>
void thread(void)
{
int i;
char c ;
for(i=0;i<5;i++){
printf("This is a pthread.n");
//sleep(1000);
c=getchar();
}
}
int main(void)
{
pthread_t id;
int i,ret;
char c;
pthread_attr_t attr;
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
ret=pthread_create(&id,NULL,(void *) thread,NULL);
if(ret!=0){
printf ("Create pthread error!n");
exit (1);
}
for(i=0;i<3;i++)
printf("This is the main process.n");
pthread_join(id,NULL);
return (0);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
比如一个同时连接数超过 1000 的网站,服务器程序
楼主能否把QQ留下,我也是多线程编程的,我的:65448993
线程里面设置了,pthread_setcanceltype(),pthread_setcancelstate().然后用pthread_cancel()在外部结束线程,这样线程的栈内存不会释放吗?
我上边的代码为什么又编译不过去了呢?
[root@localhost TM]# g++ testPthread.cpp -lpthread
testPthread.cpp: In function `int main()':
testPthread.cpp:22: error: invalid conversion from `void*' to `void*(*)(void*)'
我很是奇怪,当时我编译过去了的!请指教一下
不知道你用的什么系统。
在redhat9下好像有单进程255线程的限制。
并且每个线程默认的栈为8M。
1000个,不知道你有多大的内存,呵呵。
可以用ulimit -a查看栈的大小。
用ulimit -s修改,比如ulimit -s 256。
所谓的可能,是指分配了8M,但不一定会用到8M。
至于线程限制可以通过系统参数进行调整,例如:
#define PTHREAD_THREADS_MAX 1024
有人说可以通过编译内核解决,我不会,见谅。
另外,什么样的应用值得你开1000个线程呢,呵呵。
这个 “可能”怎么讲?
我测试过我如果给它分配1000个线程,
系统就会报告:Cannot allocate memory
谢谢楼上指点!waiting ...
VIRT是给整个程序结构分配的可能内存空间
没什么实质性意义
你可以再create几个线程
看看增量
应该就放心了
那如果我编写一个服务器端的程序,需要起很多的线程来分别处理!
是不是就要有好多的栈被占用啊?
这样会不会造成什么影响?
线程函数如果不用pthread_exit()结束,栈内存就不释放