并发是任务数多于cpu核数,这样看起来是一起执行,其实切换比较快而已
并行就是任务数小于cpu核数,一起执行

单核其实就是类似于并发,一个一个切换的比较快,多核可以看成多个单核,类似操作。

调度算法:什么样的情况下让谁先执行,就是调度算法

进程:正在运行的代码
程序:编写完毕的代码,没有运行
进程的三个状态:就绪,运行,阻塞
———————————————————————————————————————————————

ret=os.fork() #创建一个子进程
主进程中ret>0,子进程中ret=0,有了os.fork就创造了一个子进程,下面的都执行。

当主进程退出就退出,不会因为子进程没结束就等他。只是因为加了一个os.fork(),主进程打印over了,子进程还是执行over

python的任务调度项目 python进程调度算法_单核

全局变量在一个进程中数据修改不能个改变另一个进程的数据

python的任务调度项目 python进程调度算法_子进程_02


多次fork,如果是并列的就是2的n次方

python的任务调度项目 python进程调度算法_调度算法_03


和fork不一样的地方就是,fork,windows里面没有,所以要想创建一个进程就用from multiprocessing import Process

python的任务调度项目 python进程调度算法_python的任务调度项目_04


这时候把下面的while True删除了,主进程就会等待子进程结束在结束,而fork不会,两个没有影响join会一直等到这个进程结束才会进行下一个进程,这个不结束就一直等

python的任务调度项目 python进程调度算法_单核_05

常用的Process方法

python的任务调度项目 python进程调度算法_单核_06

子类创建进程,用类来编写,继承Process类,可以有__init__,外部的start一定会调用run方法,所以是重写run方法

python的任务调度项目 python进程调度算法_多进程_07


进程池,非堵塞方式,堵塞就把apply_async变成apply就是一个进程结束在执行另一个进程

apply是阻塞的,所以进入子进程执行后,等待当前子进程执行完毕,在继续执行下一个进程。

apply_async是非阻塞的,根据系统吊调度。

python的任务调度项目 python进程调度算法_python的任务调度项目_08


———————————————————————————————————————————————

进程间的通信

from multiprocessing import Process,Queue

q=queue()

q.put(0)

q.get()就是取出来并且读出来

q.qsize()判断里面有几个参数

q.full()判断队列满了没

q.empty()判断队列是不是空了

这个只能用作Process,如果要用到进程池的话需要from multiprocessing import Manager,Pool

初始化时候要p=Manager().Queue()

python的任务调度项目 python进程调度算法_调度算法_09