并发编程
多进程
1.进程与程序
进程:一个正常运行中的程序 是一系列程序执行的过程的总称(抽象概念)
程序:是有程序员将自己的思维逻辑按照某种编程语言规范编写下来的一堆字符串,最终形成的一堆文件
进程是由程序产生的,没有进程就没有进程
2.操作系统与进程
应用程序无法直接运行在硬件之上,一定要借助操作系统
所以进程是由操作系统创建的
操作系统本质也是一款软件
与普通软件的区别
操作系统是真正在控制硬件的
应用程序是在调用操作系统提供的接口
主要功能:
1.帮你封装隐藏了丑陋复杂的硬件操作,提供了简单的优雅的接口
2.需要将各个应用程序对硬件的竞争变得有序
3.多道技术的演变
空间复用:同一时间在内存中存放多个应用程序
切换
多道本质是为了解决同一时间只有一个应用程序被执行的问题
1.当一个程序A在执行过程中与IO操作(IO通常都是非常慢的)操作系统就会切换到另一个程序执行
感觉就像是多个应用程序都在执行(并发)
2.当一个程序A执行时间过长也会强制切换到其他程序到其他的应用程序,以此保证度多个程序都在执行
3.如果出现了一个优先级更高的任务也会切换
保存状态
当一个操作系统要从一个进程切换到另一个进程时,必须保存当前的状态,以便下次切换回来的时候继续执行
强调:
多个进程之间内存要相互独立,并且是物理层面的隔离(程序是不可能修改的),保证安全性
多道技术带来的好处
1.同一时间可以有多个应用程序在执行 在IO比较多时 极大的提高了效率
弊端:
如果所有应用程序都没有IO操作,反而会降低效率
应用程序的执行效率取决于IO操作,IO操作越多则效率越低
提高效率:
1.减少IO
2.避免被操作系统切换
进程的状态
1.阻塞态
遇到IO
2.运行态
3.就绪态
进程
如何产生进程 与 进程的父子关系
运行一个程序就会产生一个进行
py文件要运行 必须借助python解释器 所以启动的进程时python.exe
同一个程序可以多次运行 产生多个进程
每个进程都会随机分配一个PID(进程ID)
一个进程a开启另一个进程b b就是a的子进程
并发,并行,串行,阻塞
默认情况下 代码是串行
串行:按照顺序依次执行第一行执行完毕后才会执行第二行
需要注意的是 串行执行的过程中 因为计算操作太多也会导致程序卡住 但是这与io阻塞不同的
io阻塞立马将cpu切到其他进程
阻塞:指的是进程的状态
并发:指多个事件同时发生了(单核就是通过切换和保存状态来实现 就是多道技术)
并行:真正意义的同时执行(只在多核处理器才可能出现)