【Python】 协程

# 协程的概念: 在单线程下实现任务并发
# 协程就是一个用户态的轻量级线程,即协程是由用户程序进行调度的
# 特点: 1.必须只有一个单线程里实现并发
# 2.修改共享数据无需加锁
# 3.用户程序里自己保存多个控制流的上下文
# 4.一个协程遇到io操作,自动切换到其他协程

# 优点: 1.协程的开销更小, 属于程序级别的切换,操作系统感知不到, 因而更加轻量级
# 2.单线程内可实现并发效果,最大限度利用cpu

# 缺点: 1. 本质上还是单线程, 无法利用多核
# 2. 协程是单个线程,一旦协程遇到阻塞,将会阻塞整个线程

# 基础实现方法: yield
import time
times = 100000000
def producer():
g = consumer()
next(g)
for i in range(times):
g.send(i)


def consumer():
while 1:
res = yield


s = time.time()
producer()
e = time.time()
print('并行', e-s)

# 串行
def producer1():
res = []
for i in range(times):
res.append(i)
return res

def consumer1(res):
pass


a = time.time()
consumer1(producer1())
b = time.time()
print('串行:', b-a)
posted @ 2018-08-26 18:03  caya  阅读(78)  评论(0编辑  收藏  举报