程序:程序是一系列有序指令的集合,用于告诉计算机要执行何种操作及操作的先后顺序。这些指令包括进行各种计算、数据处理、输入输出等操作,用来完成特定的任务或解决特定的问题。
进程:进程从不同的角度可以有不同的定义。(1) 进程可以认为是程序的一次执行(2) 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配的基本单位。
程序 VS 进程:
程序的并行性是指两个或多个程序在同一时刻处于运行状态。如:在一条同向多车道的公路上,同一时刻可以有多辆车经过同一个地点。
程序的并发性是指两个或多个程序在同一时间间隔内发生。如:在一条单车道的公路上,若有多辆车想经过一个地点,只能按照一定的顺序依次通过。
早期的操作系统都属于单核CPU,这意味着计算机在同一时刻只能同时运行一个程序,且只有一个程序运行结束后后面的程序才能依次执行。
为了解决多个程序需要并发执行的问题,操作系统引入了进程的概念,在操作系统中每个正在运行的程序都被抽象成“进程”的概念,每个创建的进程都有一个对应 进程控制块(PCB process control block),PCB中含有一些特定的属性,当一个进程在运行过程中出现了优先级更高的进程,则当前程序所有运行的状态都通过PCB进行保存,等到进程下次执行就会恢复原先在状态,以此实现对多个进程的调度。
由于操作系统对进程调度的速度很快,多个进程在一段小的时间间隔内被调度了非常多次,因此在宏观上属于“并行执行”;而在微观的角度上,单核CPU的计算机在一个时刻只能运行一个进程 ,多个进程是依次进行执行的,因此在微观上属于“并发执行”。
前面说到了每个进程都有一个PCB,用于描述一个进程,因此PCB本质上就代表了一个进程,它相当于C语言中的结构体或Java中的类,PCB中主要的属性如下:
线程是一个比进程更小的基本单位,一个进程可以有多个线程,而一个线程只能存在于一个进程当中。线程是系统调度的基本单位,也称作“轻量级进程”。
这里先说结论:
进程相比于线程的劣势:
引入线程的优势:
概念上:进程是系统资源分配的基本单位,线程是系统调度的基本单位。
包含关系:一个进程可以包含多个线程,而一个线程只能从属于一个进程。
拥有资源:每个进程拥有独立的内存空间和其他资源,而多个线程共享进程内的资源。
独立性:每个进程拥有独立的资源,因此多个进程间的信息不能被直接访问,进程间的运行一般不会相互影响;线程共享进程的资源,多个线程可能因为资源的争抢产生死锁等问题。
上下文切换:进程间拥有独立的资源,因为进程间切换需要保存和加载上下文信息,因此系统开销较大;线程共享进程的内存和资源,因此线程间切换开销较小。
以上就是本篇文章的全部内容了,如果这篇文章对你有些许帮助,你的点赞、收藏和评论就是对我最大的支持。
另外,文章可能存在许多不足之处,也希望你可以给我一点小小的建议,我会努力检查并改进。