1、并发和并行的理解?
并行指两个或者多个事件同一时刻发生,并发是两个或者多个事件在同一时间间隔发生;
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件(如单核CPU轮转时间片)。
2、同步、异步、阻塞、非阻塞的概念。
同步:一个同步调用发出之后,调用者需要一直等待返回结果。有返回结果后,才能执行后续的操作。
异步:当一个异步调用发出之后,调用者不需要立刻等待返回结果,实际处理这个调用的部件在完成之后,通过状态、回调来通知调用者。
阻塞:调用结果返回前,线程会被挂起,即阻塞。
非阻塞:即使调用结果没有返回,也不会阻塞当前的线程。
3、进程、线程基本概念、区别?
进程:是系统进行资源分配和调度的独立单位,是系统中的并发执行的单位。
线程:进程的一个实体,是CPU调度和分派的最小的基本单位,有时候被称为轻量级进程等,比进程更小的能够独立运行的基本单位。
4、为什么有了进程,还要有线程。
进程可以使得多个程序并发执行,提高资源的利用率与系统的吞吐量,但是带来一些缺点。
1、进程在同一时间只能干一件事
2、进程在执行的过程中如果被阻塞了,整个进程就会被挂起,即使进程中有些工作不依赖等待的资源,但是仍然会被阻塞不被执行。
所以引入了线程,作为并发执行的基本单位,减小程序在并发执行时候的时间与空间开销,提高并发的性能。
5、进程的状态转换?(转换)
进程转换有:就绪态、运行态、阻塞态。
进程有:创建态和终止态,但是他们无法循环转换。
进程间的通信方式有哪些?
IPC:InterProcess Communication 进程间通信。
是指在不同进程之间传播或者交换信息。
通常有管道、消息队列、信号量、共享存储、Socket、Streams等。
管道:
1、半双工,具有固定的读端和写端。
2、只能用于父子进程或者兄弟进程之间的通信。
3、可以看成一种特殊的文件,对于他的读写可以使用普通read、write函数。
但不是普通的文件,不属于其他任何文件系统,只存在内存之中。
命名管道:
1、FIFO可以在无关的进程之间交换数据,与无名管道不同;
2、FIFO有路径与之相关联,他以一种特殊设备文件形式存在文件系统之中。
消息队列:
1、消息的连接表、放在内核中,一个消息队列由一个标识符ID标识。
2、面向记录的, 消息具有特定的格式以及优先级。
3、独立于发送与接收进程。进程终止时,消息队列及其内容不会被删除。
4、可实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按照消息的类型读取。
信号量:
1、计数器,实现进程之间的互斥与同步,而不是用于存储进程间通信数据。
2、信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
3、基于操作系统的PV操作,程序对信号量的操作都是原子操作。
4、每次对信号量的PV操作不限于对信号量+1或者-1,可以加减任意正整数。
5、支持信号量组。
共享内存:
1、指两个或者多个进程共享一个特定的存储区域;
2、最快的一种IPC,因为进程是直接对内存进行存取。
8、进程的调度算法
1、先来先服务。
也叫作先进先出,顾名思义,当每个进程就绪之后,就加入就绪队列。当前正在运行的进程停止之后,选择在就绪队列中存在时间最长的进程进行运行,既可以用于作业调度,又可以用于进程调度。
2、时间片轮转法。
主要用于分时系统,将所有就绪进程按照到达时间的先后次序排成一个队列,进程调度程序总是选择第一个进行执行。即先来先服务的原则,但是只能运行一个时间片。
3、短作业优先调度法。
从后备队列中选择一个或者若干个估计运行时间最短的作业,将他们调入内存运行。是一个非抢占策略。
4、最短剩余时间优先调度算法。
这个是针对最短进程优先增加了抢占机制的版本,进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,可能比当前运行的进程具有更短的剩余时间,所以只要该进程就绪了,那么就可能抢占当前正在运行的进程。存在的危险:长进程饥饿。
5、高响应比优先调度算法。
主要用于作业调度。对先来先服务和短作业优先调度算法的一种综合平衡。
同时考虑每个作业的等待时间和估计运行时间,进行作业调度时,计算后备作业队列中每个作业的响应比,选出响应比最高的
6、优先级调度算法。
9、什么是死锁
指多个进程在进行过程中因为争夺资源而造成的一个僵局,如果没有外力作用,将无法再向前推进继续工作。如图所示。
10、产生死锁的原因
系统中存在一些不可剥夺的资源,当两个或者两个以上进程占有自身资源,并且请求对方资源时,导致每个进程都无法推进。可能会由于竞争资源或进程推进顺序不当造成。
资源可以分为两类:
1、可剥夺资源。即可以被其他进程或者系统剥夺。CPU和主存都属于这类可剥夺的资源。
2、不可剥夺资源:当该资源分配给某个进程后,不能强行回收了。如打印机等。
11、死锁产生的必要条件
1、互斥条件:进程要求对所分配资源进行排他性控制,即在一段时间某个资源仅为一个进程使用。
2、请求和保持条件:当进程因请求资源而阻塞,对已经获得的资源保持不放。
3、不剥夺资源:进程已获得的资源未使用之前,不能剥夺,只能自己释放。
4、环路等待:发生死锁时,必然存在一个进程-资源的环形链。
12、解决死锁的基本方法
1、预防死锁。
2、避免死锁。
3、检测死锁。
4、解除死锁。
13、预防死锁的办法?
1、破坏请求条件:一次性分配所有资源,就不会再有请求了。
2、破坏请求-保持条件:只要一个资源得不到分配,就不会给这个进程分配其他的资源。
3、破坏不可剥夺的条件:当某个进程获得了部分资源,但是得不到其他的资源,则释放已经占有的资源了。
4、破坏环路等待条件:系统给每类资源一个编号,每一个进程按编号递增的顺序请求条件,释放则相反
14、避免死锁的办法?
1、安全状态。
2、单个资源的银行家算法。
3、多个资源的银行家算法。
15、如何解除死锁?
1、剥夺资源:挂起某些死锁进程,并且抢占该资源。但同时应该防止被挂起的进程长时间得不到资源。
2、撤销进程:强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程的优先级和撤销进程的代价的高低进行。
3、进程退回:让一个或多个进程回退到足以避免死锁的地步。进程回退时自愿释放资源而不是被剥夺,这个方法要求系统保持进程的历史信息,设置还原点。