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

原创 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(不需要共享堆):优势在于安全






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

进程、线程、堆、栈的关系

进程、线程、堆、栈 由什么控制?区别
  • hnulwt
  • hnulwt
  • 2014年11月17日 18:00
  • 2383

进程线程及堆栈之间内存分配和关系总结

进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性...
  • Enter_
  • Enter_
  • 2014年03月12日 13:29
  • 6562

线程的堆区和栈区

堆区:  1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)  2.jvm只有一个堆区(heap),被所有线程共享,堆中不存放基本类型和对象引用...
  • qq_26222859
  • qq_26222859
  • 2016年02月27日 11:27
  • 1061

Heap,创建进程私有堆

#include #include using namespace std;int main() { // Create a private heap HANDLE hHeapNew...
  • wangyao1052
  • wangyao1052
  • 2015年04月18日 20:01
  • 344

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

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

JVM为什么分线程共享和非线程共享

大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stac...
  • zcl1359205840
  • zcl1359205840
  • 2016年03月30日 21:13
  • 1786

对静态库,共享库,动态加载库的理解

转载来源:http://blog.sina.com.cn/s/blog_8f3985400100uw5k.html 在上面原文基础上整理了一下,主要突出了重点内容。         库文件一般就是...
  • yanxinrui0027
  • yanxinrui0027
  • 2016年05月18日 21:15
  • 2017

C++ 封装私有堆(Private Heap)

Private Heap 是 Windows 提供的一种内存内存机制,对于那些需要频繁分配和释放动态内存的应用程序来说,Private Heap 是提高应用程序性能的一大法宝,使用它能降低 new /...
  • educast
  • educast
  • 2013年10月25日 22:53
  • 1103

线程之间共享的内容

在一个进程的线程共享堆区,而进程中的线程各自维持自己堆栈。 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、...
  • xiaominkong123
  • xiaominkong123
  • 2016年08月02日 23:18
  • 1247

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

同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢? 共享的资源有 a. 堆  由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上...
  • u014558484
  • u014558484
  • 2016年09月15日 20:06
  • 5423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程使用共享堆而非私有堆的原因分析
举报原因:
原因补充:

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