协程

协程

  • 1、是操作系统不可见的

  • 2、协程本质就是一条线程,多个任务在一条线程上来回切换

  • 3、利用协程这个概念实现的内容:来规避io操作,就达到我们将一条线程中的io操作降到最低的目的

  • 进程:数据隔离、数据不安全、操作系统级别、开销非常大、能利用多核

  • 线程:数据共享、数据不安全、操作系统级别、开销小、不能利用多核、一些和文件操作相关的io只有操作系统能感知到

  • 协程:数据共享、数据安全、用户级别、开销更小、不能利用多核、协程的所有的切换都是基于用户,只有在用户级别能够
    #感知到的io才会用协程

  • 用户级别的协程还有什么好处:

    • 1、减轻了操作系统的负担
    • 2、一条线程如果开了多个协程、那么给操作系统的印象是线程很忙、这样能多争取一些时间片来被CPU执行,程序的
      #效率就提高了

最简单的版本

from gevent import monkey
monkey.patch_all()
import time
import gevent

def fun():    #带有io操作的内容写在函数里,然后提交fun给gevent
    print('start fun')
    time.sleep(1)
    print('end fun')

g1 = gevent.spawn(fun)
g2 = gevent.spawn(fun)
g3 = gevent.spawn(fun)
gevent.joinall([g1,g2,g3])
g1.join() #阻塞,直到协程g1任务执行结束
g2.join() #阻塞,直到协程g2任务执行结束
g3.join() #阻塞,直到协程g3任务执行结束

asyncio

import asyncio


async def fun(name):
    print('start',name)
    # await 后面接可能会发生阻塞的方法
    #await 关键字必须写在一个async函数里
    await asyncio.sleep(1)
    print('end')

loop = asyncio.get_event_loop()
# loop.run_until_complete(fun('test'))#
loop.run_until_complete(asyncio.wait([fun('test1'),fun('test2')]))  #异步启用多个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值