并发编程
多进程
1.进程与程序
进程:一个正在运行中的程序 是一系列程序执行的过程的总称(抽象概念)
程序:是有程序员将自己的思维逻辑按照某种编程语言规范编写下来的一堆字符串,最终形成的一堆文件
进程是有由程序产生的.没有程序就没有进程
2.操作系统与进程
应用程序无法直接运行在硬件之上,一定要借助操作系统,
所以进程是由操作系统创建的
操作系统本质也是一款软件,
与普通软件的区别?
操作系统是真正在控制硬件的
应用程序实在调用操作系统提供的接口
主要功能:
1.帮你封装隐藏了丑陋复杂的硬件操作,提供了简单的,优雅的接口
2.需要将各个应用程序对硬件的竞争变得有序
3.多道技术的演变
多道技术是为了解决同一时间只有一个应用程序被执行的问题
多道技术提高效率的原理就是通过空间复用和时间复用
空间复用:同一时间在内存中存放多个应用程序
时间复用:
切换
1.当一个程序A 在执行过程中与到IO操作(IO通常都是非常慢的) 操作系统就会切换到另一个程序执行
感觉像是多个应用程序都在执行 (并发)
2.当一个程序A 执行时间过长 也会强制切换到其他的应用程序,以此保证度多个程序都在执行
3.如果出现了一个优先级更高的任务 也会切换
保存状态
当一个操作系统要从一个进程切换至另一个进程时,必须保存当前进程的状态,以便下次切换回来的时候继续执行
强调:
多个进程之间内存要相互独立,并且是物理层面的隔离(程序是不可能修改的),以保证安全性
多道技术带来的好处
1.同一时间可以有多个应用程序在执行 在IO比较多时 极大的提高了效率
弊端:
如果所有应用程序都没有IO操作,反而会降低效率
应用程序的执行效率取决于IO操作,IO操作越多则效率越低.
提高效率:
1.减少IO
2.避免被操作系统切换
4.进程的状态
阻塞态
遇到IO操作了
运行态
正在运行中
就绪态
准备好运行了,等待cpu权限
5.并发,并行,串行,阻塞
默认情况下 代码是串行的
串行: 按照顺序依次执行 第一行执行完毕后才会执行第二行
需要注意的是 串行执行的过程中 因为计算操作太多也会导致程序卡住 但是这与io阻塞是不同的
io阻塞立马将CPU切到其他进程
而串行执行一堆计算任务 CPU没有切走
阻塞: 指的是进程的状态
并发: 指多个事件同时发生了(单核下就是通过切换+保存状态来实现 就是多道技术)
并行: 真正意义上的同时执行 (只在多核处理器才有可能出现)
6.多进程的使用
方式一:
windows 开启子进程 与 linux开启子进程方式不同
为什么开子进程?
是因为有一段代码要交给他
所以他一定套读取你的数据 才能帮你处理
linux 会直接将主进程的内存 完整copy到自己的空间中
windows 导入你的程序代码 执行一遍生成一模一样的数据
那就意味这如果子进程读到了创建子进程的代码 它也会创建子进程
结论: 在windows中 创建子进程的代码必须放main判断下面
方式二:
继承Process类 覆盖run方法,写上自己的语法,就可以在调用自己的类时创建
子进程来运行自己的语法
7.僵尸进程与孤儿进程
僵尸进程是指父进程生成了很多子进程,子进程在调用结束后会产生一些关于子进程
的pid,关闭时间之类的信息保存在子进程中,只有当父进程调用wait方法时才会关闭
子进程,期间子进程处于Z状态,占用pid,所以僵尸进程是有害的
孤儿进程是指父进程生成了子进程,子进程还没关闭,父进程就关闭了,这样这些子进程
就成了孤儿进程,会被操作系统收养,并对他们使用wait方法来关闭它们,所以它们是无
害的.