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

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






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

相关文章推荐

一个进程中各线程的堆和栈的关系

在很多现代操作系统中,一个进程的(虚)地址空间大小为4G,分为系统空间和用户空间两部分,系统空间为所有进程共享,而用户空间是独立的,一般WINDOWS进程的用户空间为2G。   一个进程中的所有线程...

Java之美[从菜鸟到高手演变]之Java学习方法

前段时间逛论坛,总会有很多新手很迷茫,问到:到底该怎么学好Java,这个问题很重要,尤其对于像我们这样大多数都是靠自学的人来说,找到一个好的学习方法至关重要!于是乎,我就给大家回答了很多,突然间想到了...

Java之美[从菜鸟到高手演练]之Comparator和Comparable在排序中的应用

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。阅读过程中有任何问题,请联系egg:邮箱:xtfggef@gma...

Java之美[从菜鸟到高手演变]之优秀资源集合

专门开一篇文章,记录一些优秀的技术http://www.ibm.com/developerworks/cn/java/

多线程经典面试题

1、基本概念         详见:线程和进程关系和区别、同步和互斥、进程间通信 2、以下多线程对int型变量x的操作,哪几个不需要进行同步(D)       &#...

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

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

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

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

线程私有数据示例代码

通过JVM堆栈分析线程出现大量异常的原因

转自:http://rujingzhang.iteye.com/blog/2251792 首先进入线上,使用ps -aux命令,查看jvm进程,可以得到运行tomcat的jdk的地址:  /hom...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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