1、协程:
单线程实现并发
在应用程序里控制多个任务的切换+保存状态
优点:
应用程序级别速度要远远高于操作系统的切换
缺点:
多个任务一旦有一个阻塞没有切,整个线程都阻塞在原地
该线程内的其他的任务都不能执行了
一旦引入协程,就需要检测单线程下所有的IO行为,
实现遇到IO就切换,少一个都不行,以为一旦 一个任务阻塞了,整个线程就阻塞了,
其他的任务即便是可以计算,但是也无法运行了
2、协程序的目的:
想要在单线程下实现并发
并发指的是多个任务看起来是同时运行的
并发=切换+保存状态
yield实现协程
yield可以实现协程,但是无法做出有意义的提升效率的协程
gevent模块的使用
from gevent import monkey,spawn;monkey.patch_all()
import time
def eat(name):
print('%s eat 1' %name)
time.sleep(3)
print('%s eat 2' %name)
def play(name):
print('%s play 1' %name)
time.sleep(4)
print('%s play 2' %name)
start=time.time()
g1=spawn(eat,'egon') #内置的一个模块
g2=spawn(play,'zmy')
g1.join()
g2.join()
# eat('ooo')
# play('rrr')
print(time.time() - start)
print(g1)
print(g2)
练习
等补全
网络IO模型介绍
阻塞IO模型
非阻塞IO模型