进程和线程有哪些区别与联系?

 


在操作系统课程中我们知道,进程和线程是两个重要的概念,两者不能混淆。本文将针对两者进行一个简单的讲解。


什么是线程?


  • 在一个程序里的一个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的控制序列”。
  • 一切进程至少都有一个执行线程
  • 线程也被叫做轻量级进程

什么是进程?

 

  • 进程是程序的一个执行的实例。
  • 进程是正在执行的程序。
  • 进程是能分配处理器并由处理器执行的实体。

进程和线程的基本单位是是什么:

  • 进程是资源竞争的基本单位
  • 线程是程序执行的最小单位


 

对于操作系统而言,进程是整个现代操作系统的根本,操作系統是以进程为单位执行任务。在以前在执行一些细小任务时,且本身无需分配单独资源时,进程的实现机制依然会繁琐的将资源分割,这样造成浪费,而且还消耗时间。所以就有了专门的多任务技术被创造出来——线程。 线程的特点就是在不需要独立资源的情况下就可以运行。如此一来会极大节省资源开销,以及处理时间。

进程和线程的主要差别在于它们在操作系统中资源管理的方式不同:

  • 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,
  • 线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量但线程之间没有单独的地址空间。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

以下是线程 跟 进程的对比表格:

进程和线程有哪些区别与联系?

  • 进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。

  • 线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。

  • 计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。

  • 进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。

  • 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。

进程的优点:

  • 提供了多道编程,提高计算机CPU的利用率。多道编程的理解:可以将多个进程同时加载到内存中,在操作系统的调度下,可以实现并发的执行。这样就可以提供了CPU的利用率。

进程的缺点:

 

  • 进程只能在一个时间内执行一件事,如果想执行多件事,进程就无能为力了。
  • 进程在执行的过程中如果堵塞,例如等待用户输入信息,整个进程就会挂起,即使进程中有些工作不依赖输入的数据,也将无法执行。

线程的优点:

  • 创建一个新线程的代价要比创建一个新进程小的多
  • 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
  • 线程占用的资源要比进程少很多
  • 能充分利用多处理器的可并行数量
  • 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
  • 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
  • I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作

线程的缺点:

  • 性能损失
  • 健壮性降低
  • 缺乏访问控制
  • 编程难度提高