Uvicorn – 最强异步服务器网关接口?

内容纲要

前置知识

Web服务、ASGI

同步-异步-阻塞-非阻塞、事件驱动、I/O-多路复用

I/O-多路复用-epoll

Uvicorn

The lightning-fast ASGI server.
基于 uvloop 和 httptools 的 ASGI 实现。

什么是 uvloop?

  • 是一个高性能的异步非阻塞框架
  • 是完整的 asyncio 事件循环的替代品
  • 建立在 libuv 之上
    • libuv 是一个高性能的,事件驱动的 I/O 库,并且提供了跨平台(如windows, linux)的 API
  • 由 Cython 编写

什么是 libuv?

libuv 架构图 ↓

图片标题

  • libuv 提供了不同的接口来操作网络 I/O、文件 I/O、DNS 相关函数以及用户代码
  • 网络 I/O 的处理,在不同平台下使用不同的异步模型
    • Linux — epoll
    • OSX & BSDs — kqueue
    • Windows — IOCP
    • SunOS — event ports
  • 文件 I/O、DNS 函数及用户代码处理不依赖平台,直接使用线程池处理
  • 代码由 C 语言实现

什么是 httptools?

  • 是 NodeJS HTTP 解析的 Python 实现
  • 由 Cython 编写

小结

号称”最强“的 Uvicorn,是一个基于事件的非阻塞框架,代码由 Cython 实现,对比 Daphne 的 Twisted(Python 实现) 事件驱动,理论上来说,速度确实是在 Daphone 之上的,Cython + 非阻塞 + 事件循环的组合,目前来看,确实是一个最强组合。

总结

「我愿称你为最强」

参考链接
IO多路复用原理剖析
Linux理解-一切皆文件

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注