https://blog.csdn.net/justloveyou_/article/details/78304294 这篇总结的不错,收藏~
1.进程和线程以及他们之间的区别?
进程定义:进程是对程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发;
线程定义:线程是进程的子任务,是cpu调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;
一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;
进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。
线程是一种轻量级的进程,与进程相比,线程给操作系统带来侧创建、维护、和管理的负担要轻,意味着线程的代价或开销比较小。
线程没有地址空间,线程包含在进程的地址空间中。所有的线程共享进程的内存和资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,寄存器的内容,栈段又叫运行时段,用来存放所有局部变量和临时变量。
2.进程间通信的几种方式?
管道以及命名管道
信号:用于通知接收进程的某个事件已经发生
消息队列
共享内存:可以使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新,需要依靠某种同步操作,如互斥锁和信号量等。
信号量:主要用作进程之间和同一进程的不同线程之间的同步和互斥手段。
套接字
3.线程同步的方式?
线程同步互斥机制:临界区、互斥量、信号量,事件。
4.什么是死锁?死锁产生的条件?
在两个或多个并发进程中,如果每个进程持有某种资源而又等待其他进程释放他们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。(两个或多个进城之间无限期的阻塞,相互等待的一种状态)
产生的四个必要条件:
互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用,若其他申请使用该资源,必须等到该资源被释放为止;
占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源被其他进程所占有;
非抢占:进程不能被抢占,资源只能被进程在完成任务后自愿释放。
循环等待:若干进程之间形成一种头尾相接的环形等待资源关系。
5.避免死锁?
死锁避免的基本思想:
动态地检测资源分配状态,以确保循环等待条件不成立
死锁解除方法:
进程终止和资源抢占
6.同步IO和异步IO
同步:在发出一个功能调用时,在没有得到结果之前,该调用就不返回
异步:当一个异步过程调用发生以后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者
同步和异步IO区别就在于:数据拷贝的时候进程是否阻塞
阻塞和非阻塞IO的区别在于:应用程序的调用是否立即返回
7.操作系统中进程调度策略?