程序、进程、线程的区别联系与优缺点

程序

是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。

进程

概念:程序的一次执行过程,或是正在运行的一个程序。
说明:进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。

补充:

  • 在操作系统中可以有多个进程在运行,可对于CPU来说,同一时刻,一个CPU只能运行一个进程,但在某一时间段内,CPU将这一时间段拆分成更短的时间片,CPU不停地在各个进程间游走,这就给人一种并行的错觉,像CPU可以同时运行多个进程一样,这就是伪并行。

线程

概念:进程可进一步细化为多个线程,是一个程序内部的一条执行路径。
说明:线程作为CPU调度和执行的单位。

补充:

  1. 一个进程中的多个线程共享同一个进程中的结构:方法区、堆。
  2. 每个线程,拥有自己独立的:栈、程序计数器,线程切换的开销小。

进程的特点

  1. 动态性:可动态地创建和结束进程
  2. 并发性:可以被独立的调度并占用处理机并发运行
  3. 独立性:不同进程的工作不相互影响
  4. 制约性:因访问共享资源或进程间同步而产生制约

并行与并发

并行: 多个CPU同时执行多个任务。比如:多个人同时做不同的事。
并发: 一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事。

程序与进程的联系

  1. 程序是产生进程的基础
  2. 程序的每次运行产生不同的进程
  3. 进程是程序功能的体现
  4. 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序

程序与进程的区别

  1. 进程是动态的,程序是静态的:程序是有序代码的集合,进程是程序的执行。
  2. 进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。
  3. 进程和程序的组成不同:进程的组成包括程序、数据和进程控制块(进程状态信息)。

使用线程的原因

因为要并发编程,在许多情形中同时发生着许多活动,而某些活动有时候会被阻塞,通过将这些活动分解成可以准并行运行的多个顺序流程是必须的,而如果使用多进程方式进行并发编程,进程间的通信也很复杂,并且维护进程的系统开销较大:创建进程时分配资源建立PCB,撤销进程时回收资源撤销PCB,进程切换时保存当前进程的状态信息。所以为了使并发编程的开销尽量小,所以引入多线程编程,可以并发执行也可以共享相同的地址空间。并行实体拥有共享同一地址空间和所有可用数据的能力,这是多进程模型所不具备的能力。

线程的好处

  • 可以多个线程存在于同一个进程中

  • 各个线程之间可以并发的执行

  • 各个线程之间可以共享地址空间和文件等资源

  • 线程比进程更轻量级,创建线程撤销线程比创建撤销进程要快的多,在许多系统中,创建一个线程速度是创建一个进程速度的10-100倍。

  • 如果多个线程是CPU密集型的,并不能很好的获得更好的性能,但如果多个线程是IO密集型的,线程存在着大量的计算和大量的IO处理,有多个线程允许这些活动彼此重叠进行,从而会加快整体程序的执行速度。

线程的缺点

  • 一旦一个线程崩溃,会导致其所属进程的所有线程崩溃。

  • 由于各个线程共享相同的地址空间,那么读写数据可能会导致竞争关系,因此对同一块数据的读写需要采取某些同步机制来避免线程不安全问题。

猜你喜欢

转载自blog.csdn.net/weixin_43514899/article/details/111473488