核心概念:进程、线程
计算机的核心就是cpu,一个cpu对应一个进程,如果把这一个cpu看作是一个工厂的话,那么线程则是工程里的工人做的事,例如:这个工厂有三名工人,这个工厂需要完成120单量,则这120单量就是这个工厂(cpu)的任务,是进程,可以理解为大任务;而平均下来每一个工人需要完成三十单,则这是小任务,是线程。
一个进程可以有多个线程,正如一个大任务里边有许多小任务。小任务合力才能完成大任务
进程
什么是进程
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
在操作系统中,每启动一个应用程序其实就是OS开启了一个进程且为进程分类对应的内存/资源,应用程序的执行也就是进程在执行。
狭义定义:一个正在运行的应用程序在操作系统中被视为一个进程
举个例子:我们有py1文件中和py2文件,两个文件运行起来后是两个进程
进程调度
"时间片轮转法"
1) os会创建多个就绪队列存储进程,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,以此类推。并且该算法赋予各个队列中进程执行时间片(进程被运行的时间)的大小也各不相同,在优先级愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍
(2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地排队等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列。
举个例子:当你在游戏中创建角色输入名字时,此时如果你迟迟不输入,则系统会先去执行其他任务
并发与并行:
并行:多个cpu同时执行多个的任务
并发:伪并发,单个cpu可以执行多个任务(时间片轮转法)
举个例子:
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
重点:在于"同时"!!
进程的状态
在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行、阻塞和终止。
- 就绪(Ready)状态
- 进程已经准备好,已分配到所需资源/内存。
- 执行/运行(Running)状态
- 进程处于就绪状态被调度后,进程进入执行状态
- 阻塞(Blocked)状态(耗时操作)
- 正在执行的进程由于某些事件而暂时无法运行,进程受到阻塞,则进入就绪状态等待系统调用
- 网络请求,input等
- 终止状态
- 进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
同步和异步
同步:
- CPU在执行一个任务的时候,任务的每一个步骤是顺序执行的,并且必须是每前一个步骤执行完毕后才可以执行下一个步骤,这就是同步的含义。
异步:
- 异步是指,任务的所有步骤也是顺序被执行,但是与同步不同的是,异步的模式下,不会等前一个步骤执行完毕后才会执行下一个步骤,而是当一个步骤一旦被执行,无论该步骤是否被执行结束,都会马上执行下一个步骤。
以做饭为例:
- 同步方式就是按照步骤依次做,先烧水,然后煮饭,最后炒菜。只有前面的步骤完成后才能进行下一个步骤。在一个步骤未完成的情况下,你不可以干任何事情。
- 异步的方式就是,在烧水且水还没开的情况下,你可以去干其他事,比如刷手机、发邮件等。也就是在等待每个步骤完成的过程中,你可以干其他事,不必傻傻的等下去。
-该案例中的,烧水、煮饭和炒菜都是一些耗时操作,可以被称为阻塞操作!