day36 协程介绍/yield实现协程/补充/gevent模块/网络IO模型介绍/阻塞IO模型/非阻塞IO模型

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模型

原文地址:https://www.cnblogs.com/wangmiaolu/p/9326286.html