进程基础知识
什么是程序
程序就是一堆文件
什么是进程
一个正在执行的文件或程序(抽象的概念)
进程与程序的区别
进程是正在运行的程序
程序被谁执行
CPU最终运行程序
通过操作系统的调度作用,将磁盘上的程序加载到内存,然后交由CPU去处理,一个CPU正在运行一个程序,就叫开启了一个进程
串行
所有的进程由CPU一个一个的解决
并发
伪并行,即单个CPU,同时执行多个进程(一个CPU在多个进程间来回切换,看起来像是同时运行)
并行
多个CPU,真正的同时运行多个程序(如果程序数大于CPU数,就结合并发运行)
阻塞
遇到IO才叫阻塞(一个CPU同时运行两个进程,假设其中一个进程完全没有阻塞,也会强制切换)
非阻塞
没有IO
进程的三种状态
进程的创建
什么是开启多个进程
例如socket模块的server端和client端,就是两个进程
在python中,如果想开启多个进程,必须是通过一个主进程开启多个子进程
Linux和Windows创建多进程的区别
相同点
都是由主进程开启子进程,两个进程都有相互隔离独立的空间,互不影响
不同点
Linux中子进程空间的初始数据完全是从主进程copy一份
Windows中子进程空间的初始数据也是从主进程copy一份,但有所不同
开启多进程的两种方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from multiprocessing import Process import time def task(name): print(f'{name} is running') time.sleep(3) print('GOAL!!!') if __name__ == '__main__': # windows环境下,开启多进程一定放在这个下面 p = Process(target=task,args=('Messi',)) # args 一定是一个元组的形式. p.start() # 通知操作系统,你给我在内存中开辟一个空间,将p这个进程放进去,然后让cpu执行. print('主进程')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from multiprocessing import Process import time class MyProcess(Process): def __init__(self, name): super().__init__() # 必须要继承父类的__init__ self.name = name def run(self): # 必须定义run名字. print(f'{self.name} is running') time.sleep(3) print('SLAM DUNK!!!') if __name__ == '__main__': # windows环境下,开启多进程一定放在这个下面 p = MyProcess('LeBron') p.start() # 通知操作系统,你给我在内存中开辟一个空间,将p这个进程放进去,然后让cpu执行. print('主进程')