一起talk C栗子吧(第一百三十二回:C语言实例--从内存的角度看进程和线程)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起talk C栗子吧(第一百三十二回:C语言实例--从内存的角度看进程和线程)相关的知识,希望对你有一定的参考价值。


各位看官们,大家好,上一回中咱们说的C程序内存布局的例子,这一回咱们说的例子是:从内存的角度看进程和线程。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们刚刚介绍完C程序的内存布局,我们趁热打铁,从内存的角度来分析一下进程和线程。

不管是进程还是线程,他们都会加载到内存中才能运行,因此他们在内存中的布局和其它C程序的内存布局完全相同。进程和线程的内存布局也分为代码区,数据区,堆区和栈区。

  • 对进程来说,父子进程只共享代码区中的内容,父子进程拥有各自的数据区,堆区和栈区。而且它们只能访问自己进程空间中的内容。这也是多进程运行时需要通过其它方式进行通信的原因,比如使用管道在两个进程之间进行通信。
  • 对于线程来说,多个线程共享主进程的内存资源,包括代码区,数据区,堆区和栈区。不过每个线程拥有 自己独立的栈区,而且不同其它线程共享。线程共享主进程的资源后,线程之间的通信变的容易一些,它 们可以直接使用主进程的资源,而且不需要借助三方的工具来使用资源。
  • 每个进程拥有自己的进程空间,在创建进程时需要为进程分配这些空间,因此需要更多的时间来创建进程。每个线程都在共享主进程的内存空间,在创建线程时只需要分配栈区给他们的就可以,其它的分区都是共用的,因此创建线程的时间会快一些。这也是线程比进程高效的原因。
  • 进程的内存空间是私有的,而线程的内存空间是共享的。因此,线程之间的通信比进程之间的通信效率 高。这才是线程与进程最大的区别,这也是大家喜欢线程最主要的原因。

各位看官,关于从内存角度看进程和线程的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


以上是关于一起talk C栗子吧(第一百三十二回:C语言实例--从内存的角度看进程和线程)的主要内容,如果未能解决你的问题,请参考以下文章

一起talk C栗子吧(第一百三十五回:C语言实例--exec系列函数一)

一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)

一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)

一起talk C栗子吧(第一百五十二回:C语言实例--计算机中的大小端)

一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)