大家都知道,计算机是为了模拟现实世界,其中计算机领域最伟大的发明之一就是操作系统。操作系统对于计算机来说是其核心的存在,可以说操作系统的地位就像计算机的灵魂一样。操作系统的诞生是为了运行用户程序,事实上程序运行在操作系统上就变成了进程,现在就来让我们一起了解一下进程相关的内容。
进程
根据理解,我们可以对进程下个定义——进程是运行中的程序。注意,进程是一个动态的概念,这一点很重要。但是进程并不是那一段可执行的程序代码,**在操作系统上进程的本质是一组有序指令加数据以及资源的集合。**操作系统上,进程是以进程主体和相应的进程控制块(PCB)形式存在的,其中进程控制块包括程序计数器,程序上下文,程序资源(文件、信号等)组成。
说完进程,我们不得不提一下线程,因为这两个经常在面试中放到一起问。
线程
所谓的线程实际上是进程内部的一条执行序列,也叫做执行流。执行序列是指一组有序指令加数据的集合,执行序列是以函数为单位的。线程是一种轻量级的进程。线程一定是在进程内部进行活动的,并且每一个线程都拥有一个独立的计数器、进程栈和一组进程寄存器。强调一点,进程调度的对象是线程,而不是进程。
介绍完进程和线程,你是不是已经对它们有些了解了呢?但是这不是结束,这才只是开始!
试想一下面试官如果问你进程和线程的区别,你该怎么去回答?有的小伙伴可能会在心里想,这个简单,比进程间通讯要简单很多!那么面试官又接着问你线程和协程的区别,或者让你把进程、线程和协程放在一起去比较,你又该怎么回答呢?说到这里你是不是有点懵了呢,事实上小编当初在面试的时候,也是有点懵的。我靠,协程是什么鬼,如果还不知道的小伙伴可以跟我一起来看一下。
首先我们来回答一下第一个问题,进程和线程的区别。
1. 进程是系统资源分配的最小单位,线程是CPU调度的最小单位
2. 一个进程可以包含多条线程,而一个线程只能属于一个进程
3. 创建进程消耗的资源要比创建线程消耗的资源大得多
4. 进程的切换效率要比线程的切换效率低得多
5. 系统中每一个进程都是相互独立的存在,而同一个进程中所有的线程只有自己的栈区,其他空间都是共享的
6. 进程之间的通讯必须借助于外部手段,而线程之间的通讯是直接通过共享空间来通讯的
7. 进程之间不存在安全问题,而同一个进程中的线程存在安全问题
说完进程和线程的区别,再来让我们回过头看一下协程。
协程
相比于前面的进程和线程,协程是一种用户态的轻量级线程。协程的调度由用户控制,**拥有自己独立的寄存器上下文和栈。**协程的切换效率比线程还要高!
介绍完协程,我们来说一下协程和线程的区别
1. 线程程是由CPU调度,而协程是由用户调度
2. 线程存在安全问题,协程比线程较安全
3. 线程使用同步机制,协程使用异步机制
相信小伙伴们已经能够区分开进程、线程、协程了吧,最后我们再来看一下管程:
前面讲了进程、线程和协程,它们三者之间具有一定的联系,那么很多小伙伴会想,管程是不是跟前面三者也有着一些联系呢?No!管程和前面的进程、线程、协程没有任何关系,非要说有什么关系,那只能是名字长得像而已,并没有什么实际的联系!
管程
管程,字面意思,是用来管理进程的。所谓的管程实际上是定义的一种数据结构和控制进程的一些操作的集合。
因为管程跟前面的进程线程、协程关系不大,在这里就不展开说明了。好了以上就是这些,相信各位小伙伴在以后的面试中不会再被这样的问题绊倒了,祝愿各位小伙伴都能找到心仪的工作。