协程小笔记

协程(Coroutine)是一种程序组件,它允许多个入口点用于暂停和恢复执行的函数,可以在单个线程内实现多任务的并发执行。与线程相比,协程提供了更轻量级的并发单元,因为它们共享同一线程的堆栈空间,并且协程之间的切换不需要操作系统的介入,从而减少了上下文切换的开销。
协程的关键特性包括:

  1. 协作式多任务:协程通过显式的暂停(yield)和恢复(resume)操作来切换执行流程,这种切换是协作式的,而非抢占式的。这意味着协程控制何时让出CPU以允许其他协程运行。
  2. 轻量级:协程通常比线程更轻量级,因为它们不需要独立的堆栈空间和线程上下文。
  3. 非阻塞I/O操作:协程经常用于执行非阻塞I/O操作,当一个协程在等待I/O时,它可以让出控制权,允许其他协程在同一线程中运行。
  4. 简化异步编程:协程可以使异步代码的编写更加容易和直观,因为它们允许使用顺序编程的方式来编写异步逻辑。
    协程在不同的编程语言中有不同的实现方式:
  • Python:通过 asyncawait 关键字支持协程。
  • Go:通过 go 关键字创建协程,并通过 channel 进行协程间的通信。
  • Kotlin:在Java虚拟机上通过 suspend 关键字和协程库支持协程。
  • C++:在C++20中引入了 co_awaitco_yieldcoroutine 关键字来支持协程。
    以下是一个使用Python协程的简单例子:
import asyncio
async def hello_world():
    print("Hello")
    await asyncio.sleep(1)  # 模拟I/O操作,让出控制权
    print("World")
# 运行协程
asyncio.run(hello_world())

在这个例子中,hello_world 是一个协程函数,它使用 async 定义,并在其中使用 await 来等待一个异步操作完成,这样它就可以让出控制权,允许事件循环执行其他任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值