1 进程与程序
进程:正在执行的一个过程。进程是对正在运行程序的一个抽象
程序:是由程序员将自己的思维逻辑按照某种编程语言规范编写下来的一堆字符串,最终形成的一堆文件
进程是由程序产生的,没有程序就没有进程
2 操作系统与进程
应用程序无法直接运行在硬件之上,一定要借助操作系统
所以进程是由操作系统创建的
操作系统本质也是一款软件与普通软件的区别
操作系统是真正在控制硬件,应用程序实际是在调用操作系统提供的接口
操作系统的主要功能
1 封装隐藏了复杂的硬件操作,提供简单的接口
2 需要将各个应用程序对硬件的竞争变得有序
3 多道技术的演变
多道技术是为了解决同一时间只有一个应用程序被执行的问题
多道技术提高效率的原理就是通过空间复用和时间复用
空间复用:同一时间在内存中存放多个应用程序
空间复用:
切换:
1 当一个程序a在执行过程中遇到IO操作时,操作系统就会切换到另一个程序执行,感觉就像是多个应用程序都在执行(并发)
2 当一个程序a执行时间过长也会强制切换到其他的应用程序,以此保证对公程序都在执行
3 如果出现了一个优先级更高的任务也会切换
保存状态:
当一个操作系统要从一个进程切换到另一个进程时,必须保存当前进行的状态,以便下次切换回来的时候继续执行
强调:多个进程之间内存要相互独立,并且时物理层面的隔离(程序是不可能修改的),以保证安全性
多道技术带来的好处
同一时间可以有多个应用程序在执行,在IO较多时极大的提高了效率
弊端:如果所有应用程序都没有IO操作,反而会降低效率
应用程序的执行效率取决于IO操作,IO操作越多则效率越低
提高效率:1 减少IO 2 避免被操作系统切换
4 进程的状态
阻塞态
运行态
就绪态
产生进程与进程的父子关系
运行一个程序就会产生一个进程
py文件要运行,必须借助python解释器,所有启动的进程是pytho.exe
同一个程序可以多次运行,产生多个进程
每一个经常都会随机分配一个PID
一个进程a 开启另一个进程b b就是a的子进程
创建进行的两种方式
1 创建Process对象,传入函数
2 创建类,继承Process类,覆盖run方法
进程间内存相互独立
join函数
会使主进程等待子进程执行完毕后才会继续执行
Process对象常用的属性
start 仅仅是发送一个信号,告诉操作系统要开子进程
name 在创建是可以给进程取名字
exitcode 获取进程的退出码,只有在进程完全结束时才能获取
pid 获取进程的pid
terminate 终止进程
is_alive 获取进程的存活状态
默认情况下代码是串行
串行:按照顺序依次执行
需要注意的是,串行执行的过程中因为计算操作太多也会导致程序卡住,但是这与IO阻塞不同
IO阻塞里面将CPU切到其他进程,而串行执行一堆计算任务,CPU没有切走
阻塞:指的是进程的状态
并发:指多个时间同时发生(单核下就是通过切换+保存状态来实现)
并行:真正意义上的同时执行(多核处理器才有可能出现)
孤儿进程
父进程退出时子进程还在运行,这些子进程被称为孤儿进程
孤儿进程没有危害
僵尸进程
子进程退出,父进程没有调用wait和waitpid获取子进程的状态信息,那么子进程描述符任然保存在系统中这些进程被称为僵尸进程
僵尸进程会占用资源