协程简介(单线程下实现并发)

一.协程

1.目标:在线程下实现并发

并发(多个任务看起来同时执行就是并发):切换+保存状态

2.协程 

协程是单线程下实现并发

在应用程序里控制多个任务的切换+保存状态(原来是操作系统干的)

注意:协程是程序员YY出来的东西,操作系统里只有进程和线程的概念(操作系统调度的是线程)

单线程下实现并发就是为了提高效率的,所以只有在单线程下多个任务遇到IO切换就可以降低单线程的IO时间,从而最大限度提升效率.


优点:应用程序级别速度要远远高于操作系统的切换,在单线程内实现并发,最大限度地利用CPU

缺点:1.无法利用多核,因为协程本质上是单线程下的

         2.多个任务一旦有一个阻塞没有切,整个线程都阻塞在原地,该线程内的其他任务都不能执行了

所以一旦引入协程就需要检测单线程下所有IO行为了,在应用程序级别上实现遇到IO就切换.

3.高并发

开启多个进程,在每个进程下开启多个线程,在每个线程内使用协程处理多个任务.从而达到最高的效率.

from gevent import monkey,spawn,joinall;monkey.patch_all()
#patch_all=>打补丁,把所有的模块,操作的IO行为都打上标记,都让gevent能够识别
#time,文件的读写也都能识别
# import gevent
import time

def eat(name):
    print('%s eat 1' % name)
    # gevent.sleep(2)
    time.sleep(2)
    print('%s eat 2' % name)


def play(name):
    print('%s play 1' % name)
    # gevent.sleep(3)
    time.sleep(3)
    print('%s play 2' % name)


start = time.time()
g1 = spawn(eat, 'alex')  # 异步
g2 = spawn(play, 'alex')

# g1.join()
# # g2.join()
joinall([g1,g2])
print(time.time()-start)

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值