线程使用共享堆而非私有堆的原因分析

原创 2015年11月19日 10:42:50

进程创建线程,每个线程可以共享进程的地址空间;但同时线程需要保留一些自己私有的数据

unix中的thread独自持有的资源:

  • Stack pointer
  • Registers
  • scheduling properties(policy and priority)
  • set of pending and blocked signals
  • Thread specific data
线程操作的特点:
  • Changes made by one thread to shared system resources will be seen by all other threads
  • Two pointers(may belong by different threads) have the same value point to the same data
  • Reading and Writing to the same memory locations need explicit synchronization by programmer
使用线程的优势:
  • Light weight: can be created with less overhead(process: fork(); thread: pthread_creat())
  • Efficient communication / Data exchange(not copy data opration, just need to pass address)
一个进程创建的多个线程:每个线程都拥有自己私有的Stack,但共享一个Heap
这样做的原因

(1)stack is for local/method variables;  heap is for instance/class variable

(2)Stack常常用来存放 函数的参数,函数中使用的自动变量,存放过程活动记录;如果多个线程共享一个Stack
会非常的凌乱,不方便使用

(3)使用共享Heap的目的是为了高效的数据共享


线程间的数据交换有两种方式:

(1)共享内存方式shared memory(共享堆):最大的优势是快速
(2)消息传递方式message passing(不需要共享堆):优势在于安全






版权声明:本文为博主原创文章,未经博主允许不得转载。

多线程之间共享哪些资源?

同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢? 共享的资源有 a. 堆  由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上...

线程间的内存共享问题----你弄懂了吗?

对线程间共享内存的问题,许多同学是不是都觉得很简单?就是用全局变量来共享码,然而你说的并没有什么卵用…….(^__^)……. 对于线程间内存关系不弄得清清楚楚,很难写好多线程程序。最简练而精准的话来...
  • a675311
  • a675311
  • 2015年10月08日 16:09
  • 2402

在多线程中体会堆和栈的区别

在多线程中体会堆和栈的区别  (2010-01-06 08:50:38) 转载▼ 标签:  c   多线程   内存管理   堆栈分配区别 ...

一些有价值的网页链接整理

Web开发技术翻译:http://www.asprain.cn/
  • zchl159
  • zchl159
  • 2016年04月27日 16:34
  • 207

H264___DCT蝶形算法____理解

转自:http://fellowher.blog.163.com/blog/static/5076351520099279115651/  中间有自己的理解。  为什么要进行变换 空间图像...
  • sno_guo
  • sno_guo
  • 2012年10月04日 20:11
  • 3453

理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列

原文章连接:http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html 我们可能经常会用到 Thread.Sleep 函数来...

理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列

在线程中,调用sleep(0)可以释放cpu时间,让线程马上重新回到就绪队列而非等待队列,sleep(0)释放当前线程所剩余的时间片(如果有剩余的话),这样可以让操作系统切换其他线程来执行,提升效率。...

修改的 创建队列程序 C语言。 队列元素 是堆分配内存,而非指针

/*构造一个空队列*/ Queue *InitQueue() { Queue *pqueue = (Queue *)malloc(sizeof(Queue)); if(pqueue!=NULL...

进程?线程?到底共享了什么私有了什么

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。...

线程的共享资源和私有资源

线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。     进程拥有这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程使用共享堆而非私有堆的原因分析
举报原因:
原因补充:

(最多只允许输入30个字)