随笔- 310  文章- 1  评论- 0  阅读- 85914 

什么是协程

协程(co-routine,又称微线程、纤程)是一种多方协同的工作方式。协程不是进程或线程,其执行过程类似于 Python 函数调用,Python 的 asyncio 模块实现的异步IO编程框架中,协程是对使用 async 关键字定义的异步函数的调用。当前执行者在某个时刻主动让出(yield)控制流,并记住自身当前的状态,以便在控制流返回时能从上次让出的位置恢复(resume)执行

 

协程与线程的区别

1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。

2) 线程进程都是同步机制,而协程则是异步。

3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。

4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。

5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。

6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# coding:utf-8
import asyncio
import time
 
async def say_after(delay, what):
    await asyncio.sleep(delay) #阻塞 delay 指定的秒数
    print(what)
 
async def main():
     
    #asyncio.create_task() 函数用来并发运行作为 asyncio 任务 的多个协程
    # task1 = asyncio.create_task(say_after(5, 'hello'))
    # task2 = asyncio.create_task(say_after(5, 'world'))
 
    print(f"started at {time.strftime('%X')}")
    # await task1
    # await task2
    await say_after(5, 'hello')
    await say_after(5, 'world')
    print(f"finished at {time.strftime('%X')}")
 
asyncio.run(main())

 

started at 10:02:52
hello
world
finished at 10:03:02

 

 posted on   boye169  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示