一:进程和线程的定义
(1)进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 
(2)线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

二:进程和线程的区别
进程在执行过程中拥有独立的内存单元,而该进程的多个线程共享内存,从而极大地提高了程序的运行效率。 
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

在很多现代操作系统中,一个进程的(虚)地址空间大小为4G,分为系统(内核?)空间和用户空间两部分,系统空间为所有进程共享,而用户空间是独立的,一般WINDOWS进程的用户空间为2G。 
一个进程中的所有线程共享该进程的地址空间,但它们有各自独立的(/私有的)栈(stack),Windows线程的缺省堆栈大小为1M。堆(heap)的分配与栈有所不同,一般是一个进程有一个C运行时堆,这个堆为本进程中所有线程共享,windows进程还有所谓进程默认堆,用户也可以创建自己的堆。 
用操作系统术语,线程切换的时候实际上切换的是一个可以称之为线程控制块的结构(TCB?),里面保存所有将来用于恢复线程环境必须的信息,包括所有必须保存的寄存器集,线程的状态等。

多线程的适用场景是什么?为啥要用多线程?

使用多线程是为了提高程序运行的效率。假如有一个程序,要求用户输入多个算式,计算出结果,并分别打印到屏幕上。如果用户一直没有输入,那么无法计算,更无法打印。如果用户输入了,必须要全部输入完,才能计算出结果,再打印到屏幕。
使用线程的话,一个线程用来等待用户输入,一个用来计算结果,一个用来打印。用户在输入算式3的时候,计算线程在计算算式2,打印线程在打印算式1,三个线程同时进行,减少了等待,这样就提高了运行效率

 三:堆和栈
堆:是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。

栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。

进程、线程、堆、栈的理解和区别!相关推荐

  1. 进程线程与栈、堆的关系

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

  2. 多CPU,多核,多进程,多线程以及进程和线程的简单理解以及区别

    当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位. 3.一个进程可以包括多个线程. 4.在单CPU计算 ...

  3. 线程与进程,你真得理解了吗

    线程与进程,你真得理解了吗 1 进程与线程的关系和区别 2 并行与并发 3 线程共享了进程哪些资源 相信大家面试时一定没少被一个问题刁难,那就是进程和线程的区别是什么?这个问题延申开来并不像表面那么简 ...

  4. 什么是“堆”,栈,堆栈,队列,它们的区别

    如果你学过数据结构,就一定会遇到"堆","栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面 ...

  5. 进程、线程和协程之间的区别和联系

    文章目录 一.进程 二.线程 三.进程和线程的区别与联系 四.一个形象的例子解释进程和线程的区别 五.进程/线程之间的亲缘性 六.协程 一.进程   进程,直观点说,保存在硬盘上的程序运行以后,会在内 ...

  6. 队列、堆、栈、堆栈的区别?

    队列.堆.栈.堆栈的区别? vs2005资料 2008-10-08 21:28:52 阅读467 评论1   字号:大中小 订阅 队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去 ...

  7. Python_进程/线程/多线程理解

    目录 进程.线程.多线程: 1.进程与线程区别 (1)进程与线程区别 (2)多进程与多线程区别 (3)更多区别 2. 进程简单理解 3. 线程简单理解 进程.线程.多线程: 进程:资源分配的最小单位. ...

  8. 进程和线程的概念、区别及进程线程间通信

    进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1. 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发: 线程是进程 ...

  9. 什么是线程?什么是进程?为什么要有线程?有什么关系与区别?

    什么是线程?什么是进程?为什么要有线程?有什么关系与区别? 进程: 程序执行时的一个实例 每个进程都有独立的内存地址空间 系统进行资源分配和调度的基本单位 进程里的堆,是一个进程中最大的一块内存,被进 ...

最新文章

  1. 吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(1)
  2. 我们用最详细的方式解析Android消息机制的源码,经典好文
  3. python turtle循环图案-有趣的Python turtle绘图
  4. Py之scikit-learn:机器学习Sklearn库的简介、安装、使用方法(ML算法如何选择)、代码实现之详细攻略
  5. 我不想just talk talk
  6. file 关闭_python文件file
  7. redis-高级特性
  8. k8s核心技术-Service概述_Service的三种类型_ClusterIP只能内部访问_NodePort可以外网访问_LoadBalancer公有云---K8S_Google工作笔记0032
  9. 仿站小技巧20190409
  10. c++中#pragma用法详解
  11. 3dmax蒙皮详细教程
  12. 应用层协议——RADIUS
  13. 如何自学成为程序员?
  14. exsi rh2288hv5 驱动_华为2288H V5阵列卡驱动下载|
  15. 计算机网络图标打不开怎么回事,双击打不开图标怎么办 双击打不开图标解决方法【详解】...
  16. 洛谷P3227 切糕
  17. Gluster分布式文件系统
  18. LabVIEW串口仪器控制
  19. 第二章软件测试基础知识
  20. 1.8 Illustrator标尺的使用 [Illustrator CC教程]

热门文章

  1. 指针数组 与 数组指针 的分析
  2. Luogu 2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  3. 在当前进程下取得当前登陆用户
  4. oracle表空间的创建及dmp 文件的导入
  5. jmeter学习笔记4 数据库插入
  6. Leetcode题解(20)
  7. Unity-3d Day03
  8. javascript之值传递与引用传递
  9. asp.net(C#)套用模板操作Excel。
  10. VS2017 配置 OpenGL 环境