Python:gevent综合案例,进程线程协程对比
综合案例:
import gevent,time#导入模块 def boy(): print('have a talk') gevent.sleep(2)#遇到gevent耗时操作协程会自行切换 print('good bye') def girl(): print('python good?') gevent.sleep(3) print('good') def people(): print('I am a person') gevent.sleep(4) print('I am a') t1= time.time()#时间戳 gevent.joinall([gevent.spawn(boy), gevent. spawn(girl), gevent.spawn(people)])#等待列表中的协程执行完毕 t2=time.time() print('time taken:',t2-t1)
输出结果为:
have a talk
python good?
I am a person
good bye
good
I am a
time taken: 4.111427545547485
进程线程协程对比:
总结:进程是资源分配的单位,线程是调度的操作系统的一个单位,一个程序至少有一个进程,一个进程至少有一个线程,即主线程;协程切换任务资源比较小,效率会更高
并发:分时切片串行的操作,实际上同一时间只有一个任务在运行
并行:可同时操作
线程和进程是由程序触发系统接口,最后的执行者是系统,协程的操作是程序员
应用场景:CPU密集型:多进程
IO密集型:线程
IO阻塞且需要大量并发场景:协程效率>线程
IO+CPU都密集:多进程+协程操作
举例:多进程:多个QQ登录;QQ之间无法沟通,进程间资源不共享
进程间通信:队列 共享消息队列
多线程:一个QQ开多个聊天窗口就是多线程,线程资源共享,操作者就是资源
同一个时间只能和一个人聊天:线程的并发
抖动窗口或视频,被迫停止与其他人聊天:线程资源竞争
指定先来后到的选择,后来要等待,解决资源竞争的办法:Lock锁+join