比 Protocol Buffers 快无限倍,开源十年后 Cap'n Proto 1.0 终发布
Cap'n Proto 是一种速度极快的数据交换格式和 capability-based RPC 系统,于 2013 年 4 月开源发布。时至今日,Cap'n Proto 1.0 终于发布,这是一个长期支持版本。
Cap'n Proto 项目作者是 Kenton Varda —— Protocol Buffers version 2 的主要开发者。他表示,Cap'n Proto 是其多年来开发 Protobufs、听取用户反馈并汲取经验思考反思后的成果结晶。
目前他已离开谷歌,因此“Cap'n Proto 不隶属于谷歌,也从未隶属于谷歌”。基准测试结果表明,Cap'n Proto 比 Protocol Buffers 快无限倍。
自上一个版本 v0.10 以来,新版本的一些亮点内容包括:
- 针对 Cap'n Proto RPC 性能的一系列优化。其中包括减少 RPC 实现和 KJ I/O 框架的内存分配量,增加从 RPC 协议中省略某些信息以减少流量的功能,以及更好地缓冲一起发送和接收的小信息以减少系统调用。
- Breaking change: 在此之前,服务器可在调用完成后调用 context.allowCancellation(),选择允许取消 RPC。在 1.0 版中,选择取消 RPC 可通过模式注解(c++.capnp 中定义的 allowCancellation 注解)来实现;模式级注解可以一次对整个文件进行设置。此外,动态选择加入需要大量的簿记工作,在实际使用中会对性能产生明显影响;而改用注释则能提高性能。对于从未使用 context.allowCancellation() 的用户来说,升级到 1.0 版时无需做任何更改,默认情况下仍不允许取消。(如果受到影响,你将看到编译错误。如果没有编译错误,则无需担心)。
- KJ 现在在有 kqueue() 的系统(MacOS 和 BSD 衍生版本)上使用它来处理异步 I/O。在 Linux 上,KJ 一直使用 epoll,但在其他类 Unix 平台上,KJ 一直使用较慢的 poll()-based 方法。
- KJ 的 HTTP 客户端和服务器实现现在支持 CONNECT 方法。
- 引入了一个新类 capnp::RevocableServer,以帮助在生命周期不受包装器控制的对象周围导出 RPC 包装器。
- 以及一些更小的 bug 修复和改进。详情可参阅 PR 历史记录。
在 1.0 版本发布后,2.0 版本的工作也开始提上日程。根据规划,v2.0 旨在对 Cap'n Proto 的 C++ API 及其配套的 KJ C++ 工具包库做出一些改变;以及做一些全面的向后兼容改动以修复一些问题,并改善团队中开发人员的体验。目前的一些想法包括:
-
需要一个支持 C++20 甚至 C++23 的编译器。Cap'n Proto 1.0 仅需要 C++14。
-
需要一个支持 C++20 协程的编译器。
-
Cap'n Proto 的 RPC 应用程序接口、KJ 的 HTTP 应用程序接口和其他程序接口很可能会进行修改,使其更加的 coroutine-friendly。
-
kj::Maybe 将变得更符合人体工学。它将不再重载 nullptr 来表示值的缺失,将引入 kj::none 来代替。KJ_IF_MAYBE 将不再生成指针,而是一个引用(这是利用 C++17 特性实现的一种技巧)。
-
将放弃对禁用异常情况下的编译的支持。
-
将放弃对 no-RTTI 模式和其他会造成维护负担的特殊模式的支持。
-
可能会修改 KJ 的引用计数方法,因为目前的设计已被证明对许多用户来说并不直观。
-
将修复 kj::AsyncOutputStream 中一个长期存在的设计缺陷,目前 EOF 信号是通过销毁流来发出的。取而代之的是将添加一个返回 Promise 的显式 end() 方法。在不调用 end() 的情况下销毁数据流将发出错误的断开信号。(还想对 KJ 流 API 进行其他一些美观改进)。
-
重新设计几个核心 I/O API,以便更好地适应 Linux 新的 io_uring 事件通知范式。
-
RPC 实现可能会改为默认允许取消。
值得注意的是,目前还没有计划对序列化格式或 RPC 协议进行任何向后不兼容的更改。所讨论的更改仅影响 C++ API。用其他语言编写的应用程序完全不受这一切的影响。
正式的 2.0 版本短时间内不会推出发布,或许也要等上几年。
更多详情可查看官方公告。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
支持变量,IDEA 插件 Fast Request 2023.1.8 发布
简介 Restful Fast Request是一个类似于 Postman 的 IDEA 插件。它是一个强大的 restful api 工具包插件,可以根据已有的方法帮助您快速、自动生成 url 和 params。 Restful Fast Request = API 调试工具 + API 管理工具 + API 搜索工具。 它有一个漂亮的界面来完成请求、检查服务器响应、存储你的 api 请求和导出 api 请求。插件帮助你在 IDEA 界面内更快更高效得调试你的 API。 Restful Fast Request 为简化 API 调试而生 倾听用户的声音,不断提升自我,本次Restful Fast Request更新主要内容如下: 新功能、优化项、修复项 Environment 方法描述截断 Instant类型解析 Windows系统APIs中目录删除 1. Environment 1.1 定义 Environment中可以设置存储一些变量,并且在其他地方使用{{key}}来替换固定值或者魔法值。 可以在以下场景中使用{{key}} Url Headers Path Params UR...
- 下一篇
Ruff v0.0.281 发布,Rust 编写的高性能 Python 代码分析工具
Ruff 是基于 Rust 编写的高性能 Python 代码分析工具(即 Linter),用于检查代码中的语法错误、编码规范问题、潜在的逻辑问题和代码质量问题等,可以提供实时反馈和自动修复建议。其主打的特性是高性能,宣称比现有的同类工具快 10~100 倍。 Ruff 核心特性 通过 pip 安装 支持pyproject.toml 兼容Python 3.11 超过 500 条内置规则,与 Flake8 内置的规则集近乎对等 重新实现了数十个 Flake8 插件,如 flake8-bugbear、flake8-comprehensions 等 支持自动修复,可自动纠正错误(例如,删除未使用的导入) 内置缓存,可避免重复分析未更改的文件 支持 VS Code、Pycharm、Neovim、Sublime Text、Emacs 等编辑器 对 monorepo 友好,具有分层和级联配置 Ruff 刚刚发布了 v0.0.281 版本。 主要变化是提升词法分析器速度。据称 Ruff 的词法分析器现在比旧版本快 2-3 倍: group v0.0.280 v0.0.281 ----- ----...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境