为什么pthread_create会占用如此多的VIRT

发布于 2022-07-22 19:56:21 字数 2054 浏览 10 评论 9

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

黑寡妇 2022-07-23 22:34:32

原帖由 elila 于 2006-5-22 11:11 发表
另外,什么样的应用值得你开1000个线程呢,呵呵。

比如一个同时连接数超过 1000 的网站,服务器程序

ゞ花落谁相伴 2022-07-23 22:34:25

楼主能否把QQ留下,我也是多线程编程的,我的:65448993

歌入人心 2022-07-23 22:33:34

原帖由 safedead 于 2006-5-18 21:04 发表
线程函数如果不用pthread_exit()结束,栈内存就不释放

线程里面设置了,pthread_setcanceltype(),pthread_setcancelstate().然后用pthread_cancel()在外部结束线程,这样线程的栈内存不会释放吗?

離人涙 2022-07-23 22:31:06

我上边的代码为什么又编译不过去了呢?
[root@localhost TM]# g++ testPthread.cpp  -lpthread         
testPthread.cpp: In function `int main()':
testPthread.cpp:22: error: invalid conversion from `void*' to `void*(*)(void*)'
我很是奇怪,当时我编译过去了的!请指教一下

温柔戏命师 2022-07-23 22:25:15

不知道你用的什么系统。
在redhat9下好像有单进程255线程的限制。
并且每个线程默认的栈为8M。
1000个,不知道你有多大的内存,呵呵。
可以用ulimit  -a查看栈的大小。
用ulimit  -s修改,比如ulimit  -s 256。
所谓的可能,是指分配了8M,但不一定会用到8M。
至于线程限制可以通过系统参数进行调整,例如:

#define  PTHREAD_THREADS_MAX          1024

有人说可以通过编译内核解决,我不会,见谅。
另外,什么样的应用值得你开1000个线程呢,呵呵。

梦情居士 2022-07-23 22:10:29

这个 “可能”怎么讲?
我测试过我如果给它分配1000个线程,
系统就会报告:Cannot allocate memory
谢谢楼上指点!waiting ...

土豪我们做朋友吧 2022-07-23 20:44:59

VIRT是给整个程序结构分配的可能内存空间
没什么实质性意义
你可以再create几个线程
看看增量
应该就放心了

一页 2022-07-23 19:33:56

那如果我编写一个服务器端的程序,需要起很多的线程来分别处理!
是不是就要有好多的栈被占用啊?
这样会不会造成什么影响?

耶耶耶 2022-07-23 01:04:28

线程函数如果不用pthread_exit()结束,栈内存就不释放

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文