并发编程
目录
并发编程:
-
程序:
- 程序就是一堆文件
-
进程:
- 进程就是一个正在执行的文件/程序
-
进程被谁运行:
- CPU最终运行你的程序
- 操作系统调度作用,将你磁盘上的程序加载到内存,然后交给CPU处理,一个CPU在运行的一个程序,就是开启了一个进程
- CPU最终运行你的程序
-
操作系统:
-
操作系统定义:
- 操作系统是存在于硬件与软件之间,管理,协调,控制软件与硬件的交互
-
操作系统的作用:
-
如果没有操作系统,去写一个程序,你要完成两层功能:
- 第一层:你要学会底层硬件:CPU,内存,磁盘是如何工作使用的
- 第二层:去调度这些底层的硬件
-
操作系统两个作用:
-
1,将一些复杂的硬件操作封装成简单的接口,便于使用
-
2,操作系统可以合理的调度分配多个进程与CPU的关系,让其有序化
-
-
-
操作系统(计算机)的发展史:
-
第一代电子计算机:操作插线与你的程序结合
-
第二代计算机:磁带存储,批处理系
-
第三代计算机:集成电路,多道程序系统
-
知识点解析:
- 多道技术解决的问题:
- 时间复用:利用闲置时间,进行复用
- 空间复用:提高内存的利用率,一个内存可以加载多个进程
- 数据隔离:
- 解决软件之间的隔离,互不影响
- 多道技术解决的问题:
-
-
进程:
-
一个程序可以开启多个进程
-
概念:
-
串行:所有的进程有CPU一个一个解决
-
并发:单个CPU,同时执行多个进程(来回切换),看起来像是同时运行
-
并行:多个CPU,真正的同时运行多个进程
-
阻塞:遇到IO(recv,input)才会阻塞
- 一个cpu运行两个进程,其中一个进程完全没有阻塞
-
非阻塞:没有IO
-
-
进程的创建:
- 什么是开启多个进程:socket:server,client两个进程
- python中,如果一次想开启多个进程,必须是一个主进程,开启多个子进程
- linux,windows:有主进程开启子进程
- 相同点:主进程开启子进程,两个进程都有相互隔离的独立空间,互不影响
- 不同点:
- linux:子进程空间的初始数据完全是从主(父)进程copy一份
- windows:子进程空间初始数据完全是从主(父)进程copy一份,但是有所不同
创建进程的两种方法:
-
函数-创建进程:
-
from multiprocessing import Process import time #当前py文件就是主进程,先运行主进程 def task(name): print(f"{name}is running") time.sleep(3) #阻塞 print(f"{name}is done") if __name__ == '__main__': #windows开启必须写在mian下面 p = Process(target=task,args=("海洋",)) #target要封装的内容,对象args一定是个元祖形式 p.start() #子进程 通知操作系统在内存中开辟一个空间,将p这个进程放进去,让cpu执行 print("___主进程")
-
类-创建进程(了解):
-
from multiprocessing import Process import time class MyProcess(Process): def __init__(self,name): super().__init__() #放在最上面,必须要继承父类init self.name = name def run(self): print(f"{self.name}is running") time.sleep(3) #阻塞 print(f"{self.name}is done") if __name__ == '__main__': p = MyProcess("海洋") p.start() print("====主进程")