kLoop 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
kLoop 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
kLoop 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MulanPSL
开发语言 Python Rust 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 Fantix
适用人群 未知
收录时间 2022-06-11

软件简介

kLoop 是一个 Python asyncio 事件循环的实现,主要用 Cython 编写,重点使用了 Linux 内核的 io_uring 和 kTLS 功能,故称作 k(ernel)Loop。

主要特性

  • 系统调用次数非常少:得益于 io_uring,所有 I/O 调用都由内核完成;因为启用了 SQPOLL,唯一的系统调用 io_uring_enter() 也仅在必要时才会用到,因此节省下了几乎所有系统调用的额外开销;
  • 主循环主体不占有 GIL:虽然使用了 Cython 编写,但大部分最核心的代码都被编译为不需要 Python 结构的普通 C 代码,一方面节省内存开销和处理时间,另一方面不持有 GIL,仅在有 Python 回调时才上 GIL 锁,对多线程稍微友好一点,但还是推荐单线程跑;
  • 内核网卡代工 TLS:如果硬件支持,TLS 通讯的全部对称加密解密皆由网卡完成,空出 CPU 来做更多的 I/O;即使网卡不支持,io_uring 也可以在内核中开多线程来执行对称加解密,不受应用端单线程的限制,充分利用多核 CPU;
  • 纯异步 DNS 解析:混编进了 Rust 写的 trust-dns,I/O 层直接走 io_uring(包括加载 /etc/resolv.conf  /etc/hosts 文件),在 C 和 Rust 之间互相调用完成 DNS 解析,并且提供了更加灵活的 Python 接口来控制并发、缓存和配置文件。

环境需求

  • Python >= 3.10
  • Linux >= 5.11 (用 modprobe tls 命令来启用 kTLS 模块)
  • OpenSSL >= 3.0(支持 kTLS 收包代工需要最新的开发版本)

目前主要是在 Ubuntu 22.04 上开发测试的。

架构图

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(2) 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
2 评论
14 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部