多任务

进程 multiprocessing

 

 进程是需要操作系统进行分配资源的

格式 multiprocessing.Process(target=函数名,args =(),kwargs={*"=*"}.start()

守护线程格式:multiprocessing.Process(target=函数名,daemon=True).start()

进程 不共享全局变量,主进程等待所有子进程结束后结束

jion() :等待子进程结束

os.getpid():当前进程号

os.getppid():当前父进程编号

子进程对象.terminate():销毁子线程

 

线程 threading

 

线程是需要cpu进行调度的

线程之间是无序的,线程之间共享全局变量

线程之间全阿菊变量出现gil问题(全局解释器锁) 使我们的进程中的线程效率无法提到最高

格式 threading.Thread(target=函数名,args =(),kwargs={*"=*"}.start()

守护线程格式:threading.Thread(target=函数名,daemon = True).start()

 

协程 gevent

 

gevent 是第三方库

特点,用代码按循序进行切换

请猴子打补丁:

from gevent import monkey 

monkey.patch_all()

这样time函数就能使用了

格式 :

gevent.spawn(函数名,参数)

gevent.joinall()

 

互斥锁 threading.Lock()

 

格式:变量名 = threading.Lock()

死锁: 一直等待对方释放锁的情景就是死锁

一个进程一把锁

 

并行与并发

并行是真正意义上的同时运行 , cpu数大于等于任务数

并发看似同时发生其实cpu进行切换    cpu数小于任务数 

当两个程序在一个cpu上执行的时候就是并发

 

进程、线程、协程之间的对比

 

单位:进程是操作系统分配资源的单位,线程是cpu调度的单位

资源大小: 进程>线程>协程

 

posted @ 2019-12-02 16:30  骑毛驴的阿凡提  阅读(97)  评论(0)    收藏  举报