操作系统之进程管理
一、进程描述
为什么校招面试中“线程与进程的区别”老是被问到?我该如何回答?
记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背||CSDN博文精选
1.定义
https://zhuanlan.zhihu.com/p/125716637
进程是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
2.进程的组成
一个进程应该包括:
程序的代码;
程序处理的数据;
程序计数器中的值,指示下一条将运行的指令;
一组通用的寄存器的当前值,堆、栈;
一组系统资源(如打开的文件)。
3.进程的特点
1)动态性:程序是静态的,进程是动态的。
2)并发性:进程可以被独立调度并占用处理机运行。
3)独立性:操作系统给不同的进程分配不同的页表,让每一个进程在一块独立的空间中运行。(页表是保证进程独立性的一个机制,保证进程地址空间相互独立)
4)制约性:因访问共享数据/资源或进程间同步而产生制约。
二、进程状态
进程的挂起 是把一个进程从内存转到外存。
三、线程
1.定义
线程是进程中的一条执行流程。
进程把一组相关的资源组合起来,构成了一个资源平台,包括地址空间(代码段、数据段)、打开的文件等各种资源。而线程是代码在这个资源平台上的一条执行流程。
1)线程的创建时间为什么比进程的创建时间短?
因为进程在创建的时候要 创建一些其他管理的信息,比如创建内存如何去管理的信息,打开的文件如何去管理的信息。而线程在创建的时候直接重用所在进程的已经管理好的这些资源,同理,他的终止时间也比较短,因为他不用考虑 资源的释放等。
2)为什么同一进程内线程切换的时间比进程短?
因为属于同一进程中的线程拥有同一个地址空间,也就是都在同一个页表,切换线程时,不需要切换这个页表。而进程切换时会把页表也切换掉,切换页表的开销是比较大的,因为会涉及到它们的访问地址空间是不一样的,它里面的很多cache信息,很多硬件信息都会无效,需要重新加载。而线程切换所有的这些信息可以重用。另外,线程共享了进程中的所包含的资源,这样在做线程之间的数据传递的时候,不需要都过内核,直接通过访问地址就可访问。所以线程的数据交换效率很高。
四、进程间通信方式
https://zhuanlan.zhihu.com/p/165224175
1.进程间通信的几种方式:
1)管道
2)消息队列
3)共享内存
4)信号量
5)信号
6)Socket
1.信号量
生产者消费者模式:
2.管程
五、线程间通信方式
https://blog.csdn.net/jisuanji12306/article/details/86363390
https://zhuanlan.zhihu.com/p/129374075
1)使用volatile关键字
2)使用Object类的wait() 和 notify() 方法
3)使用JUC工具类 CountDownLatch
4)使用 ReentrantLock 结合 Condition
5)基本LockSupport实现线程间的阻塞和唤醒