进程概述
进程是具有一定功能的程序和数据集合上的实例,当运行一个程序,就会启动一个进行。程序时候一组指令的有序集合,是一个静态实体。而进程是程序在某个数据集上的执行,是一个动态实例。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。是操作系统进行资源分配和调度的独立单位。
组成
进程是一个实体,每个进程都有自己独立的地址空间,一般包括,文本域,数据区域,堆栈。文本域存储CPU执行的代码;数据区域存储变量和进行执行期间的动态分配的内存;堆栈区域存储活动过程调用的指令和本地变量。
结构
进程可分为:程序,数据和进程控制块(PCB)三部分
状态
调度算法
- 先进先出(FIFO)
- 最短作业优先(SJF)
- 最短剩余数据优先(SRTF)
- 时间片调度算法
- 最高优先级
线程概述
线程是进程的一个实体,是CPU调度和分配的基本单位,线程不拥有系统资源,只拥有运行时的资源,线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。线程可以和同属一个进程中的其他线程共享资源。
线程的组成
线程的实体包括程序、数据和TCB。tcb用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈
线程的状态
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行,线程通常有五种状态:创建,就绪,运行,阻塞和死亡
- 创建状态:在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态;
- 就绪状态:当调用了线程的start方法,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
- 运行状态:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
- 阻塞状态:线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。
- 死亡状态:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪
状态图如下:
线程和进程的区别
- 地址空间:线程共享进程的地址空间,进程拥有自己独立的地址空间;
- 资源拥有:线程共享进程的资源,进程是资源分配的单位;
- 调度单位:线程是,进程不是;
- 并发执行:二者都可以;
- 一个程序至少有一个进程,一个进程至少有一个线程;
引入线程的好处
- 在进程内创建、终止线程比创建、终止进程要快;
- 同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换;