进程和线程有哪些区别与联系?
在操作系统课程中我们知道,进程和线程是两个重要的概念,两者不能混淆。本文将针对两者进行一个简单的讲解。
什么是线程?
- 在一个程序里的一个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的控制序列”。
- 一切进程至少都有一个执行线程
- 线程也被叫做轻量级进程
什么是进程?
- 进程是程序的一个执行的实例。
- 进程是正在执行的程序。
- 进程是能分配处理器并由处理器执行的实体。
进程和线程的基本单位是是什么:
- 进程是资源竞争的基本单位
- 线程是程序执行的最小单位
对于操作系统而言,进程是整个现代操作系统的根本,操作系統是以进程为单位执行任务。在以前在执行一些细小任务时,且本身无需分配单独资源时,进程的实现机制依然会繁琐的将资源分割,这样造成浪费,而且还消耗时间。所以就有了专门的多任务技术被创造出来——线程。 线程的特点就是在不需要独立资源的情况下就可以运行。如此一来会极大节省资源开销,以及处理时间。
进程和线程的主要差别在于它们在操作系统中资源管理的方式不同:
- 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,
- 而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
以下是线程 跟 进程的对比表格:
进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。
线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。
计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。
线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。
进程的优点:
- 提供了多道编程,提高计算机CPU的利用率。多道编程的理解:可以将多个进程同时加载到内存中,在操作系统的调度下,可以实现并发的执行。这样就可以提供了CPU的利用率。
进程的缺点:
- 进程只能在一个时间内执行一件事,如果想执行多件事,进程就无能为力了。
- 进程在执行的过程中如果堵塞,例如等待用户输入信息,整个进程就会挂起,即使进程中有些工作不依赖输入的数据,也将无法执行。
线程的优点:
- 创建一个新线程的代价要比创建一个新进程小的多
- 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
- 线程占用的资源要比进程少很多
- 能充分利用多处理器的可并行数量
- 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
- 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
- I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作
线程的缺点:
- 性能损失
- 健壮性降低
- 缺乏访问控制
- 编程难度提高