请问Linux下线程开销为什么这么大?一个线程要占用近10M内存

cpio 2011-07-21 05:53:24
32位机器,当创建到200多个线程的时候,虚拟内存占用达到3G,此时再也不能创建新线程了。

有没有系统设置可以减小线程开销?Windows下似乎线程基本不占内存。
...全文
683 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cpio 的回复:]

难道Windows是所有线程共享栈?
[/Quote]
windows默认栈1M
cpio 2011-07-21
  • 打赏
  • 举报
回复
难道Windows是所有线程共享栈?
cpio 2011-07-21
  • 打赏
  • 举报
回复
用ulimit -s 1024就好了,默认是8196,所以每次接近10M。

不知道默认为什么这么大,据说Solaris才几百k。
jackyjkchen 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cpio 的回复:]

使用QT4.7.2测试的,创建线程使用的QThread,代码很简单,从QThread继承,在run虚函数里面写的
while (true)
{
sleep(100);
}

然后开始创建这个QThread。

按jackyjkchen说的,是不是新线程会跟初始进程占用的内存一样多?那这样的话,如果初始进程占用内存多的话,它创建的新线程就会占得多?
[/Quote]

你默认栈开了多大,可能线程继承了进程的栈设置
cpio 2011-07-21
  • 打赏
  • 举报
回复
使用QT4.7.2测试的,创建线程使用的QThread,代码很简单,从QThread继承,在run虚函数里面写的
while (true)
{
sleep(100);
}

然后开始创建这个QThread。

按jackyjkchen说的,是不是新线程会跟初始进程占用的内存一样多?那这样的话,如果初始进程占用内存多的话,它创建的新线程就会占得多?
昵称很不好取 2011-07-21
  • 打赏
  • 举报
回复
从程序方面找找原因吧
xunxun 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]

Linux下的线程就是一种进程,所以Linux线程的开销是极大的。Windows是原生的线程。

但是你说200个线程就3G内存有点扯,是不是你每个线程的堆栈开太大了?

Linux下跑几百个进程都是常见的
[/Quote]
我也觉得是每个线程的堆栈

不过为啥说Linux下线程就是一种进程呢?OpenMP基于pthreads的,运行时也只看到一个进程啊
jackyjkchen 2011-07-21
  • 打赏
  • 举报
回复
Linux下的线程就是一种进程,所以Linux线程的开销是极大的。Windows是原生的线程。

但是你说200个线程就3G内存有点扯,是不是你每个线程的堆栈开太大了?

Linux下跑几百个进程都是常见的

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧