文章目录
#操作系统
进程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。
进程通信
管道
线程
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。
一个进程能够创建多少线程
线程数和资源相关,资源足够的情况下,可以无限建立。
上下文切换
线程的上下文切换就是指在CPU资源有限的情况下,每个线程的执行时间有限,CPU需要不断从一个线程切换到另一个线程,即并发操作。进程也是同样的操作。
并发和并行的区别
并发
当有多个进程在操作系统中,但是同时系统只有一个(有限个)CPU,此时系统不能同时运行多个进程,只能把CPU运行时间划分成很多段,每个时间段只运行其中的一个进程。
大部分操作系统的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态,等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
并行
当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
进程和线程
区别
- 进程时操作系统资源分配的基本单位
- 线程时任务执行和调度的基本单位
- 进程之间相互独立,但是统一进程下的线程共享一个进程的内存空间
- 线程上下文切换比进程上下文切换要快得多
简单来说,系统下面运行的每个程序就是一个进程,每个进程里面执行的任务就是一个或多个线程。
内存分配
系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
为什么要多线程而不是多进程
线程的启动快,退出快,对系统资源的影响小。
死锁
产生原因
两个或两个以上的进程在争夺资源产生的一种阻塞现象。
- 互斥性
- 请求和保持条件
- 资源不可剥夺条件
- 循环等待
- A拥有其他进程需要的资源
- 同时A在寻求其他进程占用的资源
- 资源属于不可剥夺资源
解决方法
破坏“请求和保持”条件
- 系统一次性分配好所有资源
- 让进程一次性请求到所有需要的资源,如果请求资源无法立刻获得,就让线程进行等待。
缺点:造成资源浪费,或者进程经常处于请求不到资源的情况
破坏“不可剥夺”条件
- 对进程设置优先级,高优先级的进程可以剥夺低优先级的进行资源。
- 若请求资源无法获得,则释放占有资源
破坏“循环等待”条件
系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反。
死锁的检测
- 保存系统中相关资源的请求和分配关系
- 设计算法来判断是否进入死锁状态(请求和占用关系形成环)
死锁的解除
- 终止死锁进程:
- 全部终止
- 逐步终止
- 资源剥夺法,剥夺一部分死锁进程的资源