简单来总结:
- FastAPI 构建在 Starlette 之上,Starlette 是一个高性能的异步 ASGI 框架。
- 通过异步处理,FastAPI 可以在 I/O 操作(如数据库查询、外部 API 请求等)等待期间释放线程,使其处理其他请求,从而大幅提高并发能力和响应速度。
1 程序的并发粒度
- 机器之间并行:例如大数据技术,Hadoop/Hive/Spark
2 FastAPI的高性能来自于协程的能力
概念细化推导过程:
- 从机器>进程>线程>协程的顺序,程序运行花费的资源调度耗费、程序上下文切换的耗费,从大到小递减;
- 协程是在一个线程内实现的并发,协程的并发任务之间调度和上下文的耗费最少,对于高并发场景,可以认为协程最高效率最快速;
- 协程的核心理解要点,在于函数可以用async和await配合,在IO期间交出线程执行权,让线程可以去处理其他用户请求
- 协程减少了多机器/进程/线程的调度开销+切换不同上下文的开销,更加轻量级高性能
3 协程和异步两个词语的区别
Python 可以通过使用 async 和 await 语法创建协程,并用于支持异步代码;
使用了异步编程是FastAPI具有高性能的一个重大原因。
- 协程 是一种特殊的函数,我们的函数用async def开头就是协程,可以在执行过程中暂停和恢复;
- 异步 是一种编程模式,通过非阻塞的方式处理多个任务,依赖于协程来实现。
- 简单来说,协程是实现异步编程的基础,而异步编程是通过协程等机制实现的高效任务调度和执行方式。
4 协程的本质原理
- 协程:在单线程内实现并发(问题是单线程内怎么实现并发?)
- 核心原理:用一个超级循环(其实就是while true)循环,就是线程自己的任务调度器
- 核心原理:配合IO多路复用原理(IO时CPU可以干其他事情)
《the one loop》
- 通过该图可以看到,执行路径只有一条,但是遇见IO可以去执行其他的任务,最终实现了并发。
FastAPI全套视频课程更新中,当前半价优惠: