进程
- 概念
- 被执行的程序的实例就是一个进程(类似docker的镜像与容器)
- 每个进程拥有它自己的虚拟CPU。当然,实际上真正的CPU在各进程之间来回切换。但为了理解这种系统,考虑在(伪)并行情况下运行的进程集,要比我们试图跟踪CPU如何在程序间来回切换简单得多。正如在第1章所看到的,这种快速的切换称作多道程序设计。
进程表面看是同时运行的,但是微观看一瞬间只有一个进程在运行
现在的芯片是多核,芯片包含cpu,
现在考虑简单,只考虑一个cpu
每个进程的运算速度不能确定,及时同一进程再次运行
并行:
在任何多道程序设计系统中,CPU由一个进程快速切换至另一个进程,使每个进程各运行几十或几百个毫秒。严格地说,在某一个瞬间,CPU只能运行一个进程。但在1秒钟期间,它可能运行多个进程,这样就产生并行的错觉。有时人们所说的伪并行就是指这种情形,以此来区分多处理器系统(该系统有两个或多个CPU共享同一个物理内存)的真正硬件并行。
2.1.2创建进程
有4种主要事件导致进程的创建:
- 1)系统初始化。
- 2)执行了正在运行的进程所调用的进程创建系统调用。
- 3)用户请求创建一个新进程。
- 4)一个批处理作业的初始化。
进程分类
前台进程,也就是同用户(人类)交互并且替他们完成工作的那些进程
后台进程与特定的用户没有关系,相反,却具有某些专门的功能
守护进程
(什么是系统调用:)
进程的终止
方式:
- 1)正常退出(自愿的)。
- 2)出错退出(自愿的)。
- 3)严重错误(非自愿)。
- 4)被其他进程杀死(非自愿)。
2.1.7多道程序设计模型
I/O操作时间比上在内存的时间P,当内存种有多个程序 则
\[cpu利用率=1-P^n \]解释:为什么是\(p^n\)
2.2线程
什么是线程
首先程序运行叫做进程
一个进程有一片地址空间和控制线程,但是一般现在又多个控制线程
每个程序有多个活动,每个活动就是线程
经常
线程的好处
如果线程都是密集型cpu就不能获得性能的提升,cpu密集型
大概就是运算或者处理很巨大,cpu用的时间很多,换线程还需要时间,还不然之间单线程
线程好像也有进程的三态
- 运行态
- 就绪态
- 阻塞态
2.2经典的线程模型
- 同一进程内的不同线程: 独立性低, 因为同一进程内的不同线程是为了提高并发性和相互之间的合作而创建的,他们共享进程内的地址空间和资源。
- 不同进程内的不同线程: 独立性高,为了防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其他资源,除了共享全局变量以外,不允许其他进程访问。
多线程的单cpu运行情况
- 进程的多道程序是伪并行,只是快速切换,而线程也是如此
- 支持多处理机系统
单线程进程: 在多处理机系统中,进程只能运行在1个处理机上。
多线程进程: 在多处理机系统中,进程可以在多个处理机上并发运行,无疑加速了进程了完成。
线程与进程的空间共享
- 一个进程的多个线程是在同一片内存区,共享同一内存的资源,