1.多任务
一个cpu同时做好多事情就叫做多任务
2.时间片轮转
每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间
3.优先调度
系统的进程会比开发者开发的优先调度
4.并发
在多核系统里面,同时执行多个进程,一般情况下会有些进程没有机会执行,这种情况就是并发
5.并行
在多核系统里面,同时执行多个进程吗,这些进程都有机会执行
6.进程的创建
进程:正在运行的代码叫进程
程序:没有运行的代码叫程序
--1.fork()
python中的os模块封装了常用的系统调用其中就包括fork()可以在python程序中创建子进程


说明:
程序执行到os.fork()时,操作系统会创建一个新的额进程(子进程),然后复制主进程的所有信息到子进程中
然后主进程和子进程都会从fork()函数中得到一个返回值,在子进程中这个值一定是0,而主进程中是子进程的ID号
在Linux操作系统中,提供了一个fork()系统函数,它非常特殊
普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回2次,因为操作系统自动把当前进程复制了一份,然后,分别在子进程和主进程内返回。
子进程永远返回0,而主进程返回子进程的ID
这样做的理由是,一个主进程可以fork很多子进程,所以,主进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到主进程的ID
7.getpid()和getppid()




8.进程与进程之间数据不共享
import os
import time
num = 0
pid = os.fork()
if pid == 0:
i = 0
while i < 5:
print("当前子进程,num==%d"%num)
num += 1
time.sleep(1)
i += 1
else:
i = 0
while i < 5:
print("当前主进程,num==%d"%num)
time.sleep(2)
num += 1
i += 1
运行结果:
当前主进程,num==0
当前子进程,num==0
当前子进程,num==1
当前主进程,num==1
当前子进程,num==2
当前子进程,num==3
当前主进程,num==2
当前子进程,num==4
当前主进程,num==3
当前主进程,num==4
说明:
多进程中,每个进程中所有数据都各拥有一份,互不影响
9.多次fork()问题


10.进程的创建-multiprocessing
由于python是跨平台的,自然也应该提供一个跨平台的多进程
使用process创建子进程:


主进程等待process子进程结束:


multiprocessing模块提供了一个Process类来代表一个进程对象
join等待子进程结束


说明:
创建子进程时,只需要传入一个执行函数和函数的参数,创建一个process实例,用start()方法启动,这样创建进程比fork()还要简单。
join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。