wordpress 站内搜索 慢,套用网站模板,深圳公司网站建设设计,高端手表品牌排行榜前十名文章目录 0. 引言1. 主要改进2. Iceoryx2 的架构3. C示例代码3.1 发布者示例#xff08;publisher.cpp#xff09;3.2 订阅者示例#xff08;subscriber.cpp#xff09; 4. 机制比较5. 架构比较6. Iceoryx vs Iceoryx2参考资料 0. 引言
Iceoryx2 是一个基于 Rust 实现的开… 文章目录 0. 引言1. 主要改进2. Iceoryx2 的架构3. C示例代码3.1 发布者示例publisher.cpp3.2 订阅者示例subscriber.cpp 4. 机制比较5. 架构比较6. Iceoryx vs Iceoryx2参考资料 0. 引言
Iceoryx2 是一个基于 Rust 实现的开源中间件专为实现低延迟和零拷贝进程间通信而设计。相比其前身IceoryxIceoryx2 在内存安全、并发处理、模块化设计以及多平台支持上进行了优化。
提前阅读:
C高性能通信图形简述高性能中间件IceoryxC高性能通信了解Iceoryx与零拷贝技术的实现与应用详解高性能中间件Iceoryx在ROS2中的使用
1. 主要改进 零拷贝通信Iceoryx2 保留了零拷贝通信的特性通过直接在进程间传递数据引用极大减少了数据复制从而提升了性能并降低了延迟。 Rust 语言的引入采用 Rust 语言后Iceoryx2 提升了内存安全和并发安全性。Rust 的所有权和借用机制有效防止了数据竞争和其他常见的并发错误。 模块化和扩展性模块化设计允许单独替换或升级内部组件。 跨平台支持除了在 Linux 和 Windows 上的原生支持Iceoryx2 还计划扩展到 Android、QNX 等多个平台。 支持多种编程语言Iceoryx2 不仅提供 C 和 C 的 API 绑定还支持 Python 和其他编程语言。
2. Iceoryx2 的架构
以下是 Iceoryx2 的架构图展示了主要应用模块、通信网关及支持的开发语言 #mermaid-svg-82siCAuPdcYXruo5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-82siCAuPdcYXruo5 .error-icon{fill:#552222;}#mermaid-svg-82siCAuPdcYXruo5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-82siCAuPdcYXruo5 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-82siCAuPdcYXruo5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-82siCAuPdcYXruo5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-82siCAuPdcYXruo5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-82siCAuPdcYXruo5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-82siCAuPdcYXruo5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-82siCAuPdcYXruo5 .marker.cross{stroke:#333333;}#mermaid-svg-82siCAuPdcYXruo5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-82siCAuPdcYXruo5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-82siCAuPdcYXruo5 .cluster-label text{fill:#333;}#mermaid-svg-82siCAuPdcYXruo5 .cluster-label span{color:#333;}#mermaid-svg-82siCAuPdcYXruo5 .label text,#mermaid-svg-82siCAuPdcYXruo5 span{fill:#333;color:#333;}#mermaid-svg-82siCAuPdcYXruo5 .node rect,#mermaid-svg-82siCAuPdcYXruo5 .node circle,#mermaid-svg-82siCAuPdcYXruo5 .node ellipse,#mermaid-svg-82siCAuPdcYXruo5 .node polygon,#mermaid-svg-82siCAuPdcYXruo5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-82siCAuPdcYXruo5 .node .label{text-align:center;}#mermaid-svg-82siCAuPdcYXruo5 .node.clickable{cursor:pointer;}#mermaid-svg-82siCAuPdcYXruo5 .arrowheadPath{fill:#333333;}#mermaid-svg-82siCAuPdcYXruo5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-82siCAuPdcYXruo5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-82siCAuPdcYXruo5 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-82siCAuPdcYXruo5 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-82siCAuPdcYXruo5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-82siCAuPdcYXruo5 .cluster text{fill:#333;}#mermaid-svg-82siCAuPdcYXruo5 .cluster span{color:#333;}#mermaid-svg-82siCAuPdcYXruo5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-82siCAuPdcYXruo5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Supported Platforms Iceoryx2 Vision Android Linux x86_64 Linux aarch64 Linux 32-bit macOS QNX VxWorks Windows GPU FPGA Iceoryx2 App Iceoryx2 App zenoh App DDS App ... App ROS 2 App ROS 2 App ROS 2 Tooling Autosar App Adaptive Autosar Iceoryx2 - Gateway Iceoryx2 RMW Iceoryx2 C / C / Python / ... Supported_Platforms 3. C示例代码
以下是 Iceoryx2 的发布者和订阅者的示例代码
3.1 发布者示例publisher.cpp
#include iox/duration.hpp
#include iox/slice.hpp
#include iox2/node.hpp
#include iox2/sample_mut.hpp
#include iox2/service_name.hpp
#include iox2/service_type.hpp#include cstdint
#include iostream
#include utilityconstexpr iox::units::Duration CYCLE_TIME iox::units::Duration::fromSeconds(1);auto main() - int {using namespace iox2;auto node NodeBuilder().createServiceType::Ipc().expect(successful node creation);auto service node.service_builder(ServiceName::create(Service With Dynamic Data).expect(valid service name)).publish_subscribeiox::Sliceuint8_t().open_or_create().expect(successful service creation/opening);uint64_t worst_case_memory_size 1024; // NOLINTauto publisher service.publisher_builder().max_slice_len(worst_case_memory_size).create().expect(successful publisher creation);auto counter 1;while (node.wait(CYCLE_TIME).has_value()) {counter 1;auto required_memory_size (8 counter) % 16; // NOLINTauto sample publisher.loan_slice_uninit(required_memory_size).expect(acquire sample);sample.write_from_fn([](auto byte_idx) { return (byte_idx counter) % 255; }); // NOLINTauto initialized_sample assume_init(std::move(sample));send(std::move(initialized_sample)).expect(send successful);std::cout Send sample counter ... std::endl;}std::cout exit std::endl;return 0;
}3.2 订阅者示例subscriber.cpp
#include iox/duration.hpp
#include iox/slice.hpp
#include iox2/node.hpp
#include iox2/service_name.hpp
#include iox2/service_type.hpp#include cstdint
#include iostreamconstexpr iox::units::Duration CYCLE_TIME iox::units::Duration::fromSeconds(1);auto main() - int {using namespace iox2;auto node NodeBuilder().createServiceType::Ipc().expect(successful node creation);auto service node.service_builder(ServiceName::create(Service With Dynamic Data).expect(valid service name)).publish_subscribeiox::Sliceuint8_t().open_or_create().expect(successful service creation/opening);auto subscriber service.subscriber_builder().create().expect(successful subscriber creation);while (node.wait(CYCLE_TIME).has_value()) {auto sample subscriber.receive().expect(receive succeeds);while (sample.has_value()) {std::cout received sample-payload().size() bytes: ;for (auto byte : sample-payload()) {std::cout std::hex byte ;}std::cout std::endl;sample subscriber.receive().expect(receive succeeds);}}std::cout exit std::endl;return 0;
}4. 机制比较 5. 架构比较 6. Iceoryx vs Iceoryx2
特性IceoryxIceoryx2编程语言CRust是否支持真正的零拷贝数据传输是是是否需要中央守护进程是否消息传递模式发布-订阅发布-订阅通知机制轮询事件支持的平台Linux, Windows, macOS, FreeBSD, QNX, FreeRTOSLinux, Windows, macOS, FreeBSD, Android, QNX, FreeRTOS, VxWorks语言绑定C/CRust/C/C/Python/Go/C#/Lua
参考资料
Welcome to iceoryx2’s C / C documentation! eclipse-iceoryx/iceoryx eclipse-iceoryx/iceoryx2