C++开发者必看:用Flow-IPC改善进程间通信

云计算
本着这种精神,我们在今年初推出了Flow-IPC。这是一种专门为帮助C++开发者简化IPC而设计的开源中间件(采用Apache 2.0和MIT许可证)。​

进程间通信(IPC)对于现代计算环境至关重要,这种机制使得多个处理器核心能够同时执行多个线程。IPC的本意是让不同线程甚至独立程序能够高效地共享数据。例如,当我们在线观看流媒体视频时,可能会有一个线程负责视频解码,而另一个线程负责渲染视频内容。

延伸阅读,点击链接了解 Akamai Cloud Computing

当这些线程在不同程序中运行(例如一个Web服务器和一个安全服务器)时,挑战就出现了。在这些程序之间传输大量数据的传统方法可能速度很慢且效率低下,这通常是由于不同操作系统管理内存的方式差异造成的。不过开源的Flow-IPC解决了这个问题,使得C++开发者可以快速简单地实现IPC。

Flow-IPC:一个开源的IPC中间件

Akamai于2022年收购Linode,标志着我们向着云原生计算的战略正在加速。我们还将上游贡献和倡导开源作为商业策略的一部分。本着这种精神,我们在今年初推出了Flow-IPC。这是一种专门为帮助C++开发者简化IPC而设计的开源中间件(采用Apache 2.0和MIT许可证)。

Flow-IPC最初是Akamai的一个内部工具,用于在不影响性能的情况下拆分大型应用程序。当时,现有的IPC解决方案要么太慢,要么太复杂。因此从一开始,我们就将Flow-IPC设计为C++中的IPC通用解决方案。本次将Flow-IPC开源并与开发者社区分享,是为了促进创新,让任何需要使用C++管理多线程数据共享的开发者能更简单地完成任务。

我们在2024年4月公开发布了Flow-IPC,该项目在Hacker News和其他社区平台上收到了强烈反响。很多开发者分享了自己的IPC挑战和解决方案,这也让我们积累了大量建设性的意见和宝贵反馈。

Flow-IPC是为服务器端系统开发社区内的广泛受众量身打造的。虽然它目前专注于C++,但未来也可能扩展到其他编程环境。目前,该技术只支持在x86-64架构的Linux上运行。我们计划未来将该项目扩展到macOS和ARM64架构,并根据需求扩展到Windows和其他操作系统变体。

Flow-IPC是一个具备可扩展C++17 API的库,目前可用于本地跨进程边界的通信。相关内容现已托管在GitHub上,提供了完整的文档、自动化测试和演示,此外还有一个CI管道,该管道能在一系列GNU编译器集合(GCC)和Clang编译器版本以及构建配置中进行测试,包括通过各种运行时分析器进行加固,例如ASan(防止内存误用)、TSan(防止竞争条件)和UBSan(防止各种未定义行为)。

Flow-IPC与其他解决方案的比较

Flow-IPC提供了简单高效的通信机制。与gRPC这样的通用解决方案不同,尽管它们很优雅,但可能会引入延迟,而Flow-IPC可以最大限度减少需要复制的数据,并能无缝集成到现有系统中。传统的IPC会根据负载大小引入大小不一的延迟:在我们的测试中,传输速度甚至达到了秒级范围。Flow-IPC则可以在微秒级时间内传输大小高达1GB的数据结构载荷,而速度与传输100KB载荷时差不多。这是提高了三到四个数量级的改进!通过将商业级的内存分配器与共享内存集成在一起,还能进一步提高性能。

未来展望

我们很期待整个社区能够联手让Flow-IPC走得更远。欢迎贡献、功能请求和错误报告,同时Akamai也会继续开发和完善该项目。

对于该项目,Akamai目前也有些很有潜力的想法。短期内,与capnp-rpc(以及也许和)gRPC集成是一个显而易见的选择。相关协议和API可以帮助这些框架继续保持优雅,而Flow-IPC可以提供底层的零复制性能。长期来看,凭借可扩展设计,Flow-IPC可以扩展到网络IPC领域,此外还能通过远程直接内存访问(RDMA)实现超快的局域网性能。

Flow-IPC在开源社区获得了广泛关注,我们期待与C++开发者合作,使其变得更好。Akamai也会继续通过开源模式将好用、实用的技术带给全球更多开发者。

—————————————————————————————————————————————————

如您所在的企业也在考虑采购云服务或进行云迁移,

点击链接了解Akamai Linode的解决方案

责任编辑:张燕妮
相关推荐

2012-12-26 09:51:52

C++开发者C++ CX

2013-09-05 11:04:53

C++开发者

2011-08-01 16:39:21

Xcode 目录结构

2017-08-06 00:05:18

进程通信开发

2014-04-15 11:27:50

C++开发者Objective-C核心语法

2010-11-24 10:35:40

Objective-C

2009-06-24 14:01:34

Web开发者社区Google

2011-11-15 09:38:01

黑莓移动开发开发者

2010-01-05 10:00:48

Linux进程间通信

2014-03-25 09:29:11

扁平化设计历史

2013-01-08 11:05:10

2020-11-04 07:17:42

Nodejs通信进程

2024-01-05 08:41:31

进程间通信IPC异步通信

2011-06-22 17:09:50

QT 进程 通信

2024-03-01 12:03:00

AI模型

2016-12-02 05:58:04

2020-02-05 09:13:43

编程开发编码

2018-09-11 11:07:00

2016-10-18 15:24:13

Google谷歌开源

2013-07-29 11:11:33

C++C++11
点赞
收藏

51CTO技术栈公众号