1.进程
1) 什么是进程
程序:就是一个指令序列
进程:是动态的,是程序的一次执行过程 {PCB、程序段、数据段三部分组成了进程实体(进程)} 进程是资源分配的基本单元
PCB:进程控制块,系统为每个运行的程序配置了一个数据结构,用来记录进程的各种信息,是进程存在的唯一标志,是给操作系统用的。
2) 进程的状态和转换
三种基本状态:运行态(占有CPU,并在CPU上运行)、就绪态(已经具备运行条件,但没有空闲的CPU,而暂时不能运行)、阻塞态(因等待某一事件而暂时不能运行)
3) 进程控制
本质:实现进程状态转换 利用原语实现;
原语:原子性,执行过程不允许被中断(运行在核心态)
4) 进程通信
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立;为了保存安全,一个进程不能直接访问另一个进程的地址空间。
-
共享存储:两个进程对共享空间的访问必须是互斥的
-
管道通信:其实就是在内存中开辟一个大小固定的缓冲区(半双工通信,各进程互斥访问管道、如果没写满,就不允许读;如果没读空,就不允许写;读进程最多只有一个)
-
消息传递:以格式化的消息为单位,利用原语进行数据交换
-
消息队列(Message Queue)
-
套接字(Socket)
2.线程
引入线程以后,线程成为了程序执行流的最小单位 是CPU调度的基本单位
3.管程
信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。所以把所有进程对某一种临界资源的同步操作都集中起来,这里简记为A(所有进程对另一种临界资源的同步操作都集中起来记作B)。管程相当于围墙,它把共享变量和所有进程对共享变量的同步操作(A,B等等)围了起来,所有的进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管程,从而实现了进程的互斥。
管程是为管理临界资源而建立的,被进程调用,管程和调用它的进程不能并行工作。
4.协程
协程,是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其它地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行。
协程的特点在于是一个线程执行,那和多线程比,协程有何优势?
- 极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显;
- 不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
5.进程和线程之间的区别和联系
区别:
-
进程是对运行时程序的封装,是系统进行资源分配和调度的基本单元,而线程是进程的子任务,是CPU分配和调度的基本单元;
-
一个进程可以有多个线程,但是一个线程只能属于一个进程;
-
进程的创建需要系统分配内存和CPU,文件句柄等资源,销毁时也要进行相应的回收,所以进程的管理开销很大;但是线程的管理开销则很小;
-
进程之间不会相互影响;而一个线程崩溃会导致进程崩溃,从而影响同个进程里面的其他线程;
联系:
- 线程是存在进程的内部,一个进程中可以有多个线程,一个线程只能存在一个进程中;
- 资源分配给进程,同一进程的所有线程共享该进程的所有资源;
- 处理机分给线程,即真正在处理机上运行的是线程;
- 不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行;
参考:
https://blog.csdn.net/daaikuaichuan/article/details/82951084?spm=1001.2014.3001.5502
https://blog.csdn.net/weixin_41539756/article/details/95305926