CyberRT框架总览
RTPS框架
flowchart TD
subgraph "Core Layer"
A["Core Runtime"]:::core
config["Configuration"]:::config
end
subgraph "Communication & Data Transport"
B1["Transport"]:::comm
B2["Messaging"]:::comm
B3["Data"]:::comm
B4["IO"]:::comm
end
subgraph "Scheduling & Task Management"
C1["Scheduler"]:::sched
C2["Task Management"]:::sched
C3["Timer"]:::sched
C4["Coroutine Handling"]:::sched
end
subgraph "Node & Service Management"
D1["Node"]:::node
D2["Service"]:::node
D3["Parameter"]:::node
D4["Component"]:::node
end
subgraph "Discovery & Dynamic Loading"
E1["Service Discovery"]:::disc
E2["Class Loader"]:::disc
end
subgraph "Logging & Record"
F1["Logger"]:::log
F2["Record"]:::log
end
subgraph "External Interfaces & Tools"
G1["Python Interface"]:::external
G2["Developer Tools"]:::external
end
subgraph "Third Party Dependencies"
H1["Third Party Libraries"]:::third
end
%% Core Runtime interactions
A -->|"publishes"| B2
A -->|"manages"| B1
A -->|"manages"| B3
A -->|"manages"| B4
A -->|"schedules"| C1
A -->|"controls"| D1
A -->|"controls"| D2
A -->|"controls"| D3
A -->|"controls"| D4
A -->|"discovers"| E1
A -->|"discovers"| E2
A -->|"logsTo"| F1
A -->|"recordsTo"| F2
A -->|"configures"| config
%% External Interfaces interactions
G1 -->|"callsAPI"| A
G2 -->|"monitors"| A
%% Node and Messaging interaction
D1 -->|"sendsMsg"| B2
%% Scheduler internal flow
C1 -->|"dispatches"| C2
C1 -->|"fires"| C3
C1 -->|"orchestrates"| C4
%% Service Discovery updates
E1 -->|"updates"| D1
E1 -->|"updates"| D2
%% Third Party dependency
H1 -->|"supports"| A
%% Styles
classDef core fill:#00ffff,stroke:#000,stroke-width:2px;
classDef comm fill:#ffcccc,stroke:#ff0000,stroke-width:2px;
classDef sched fill:#ccffcc,stroke:#008000,stroke-width:2px;
classDef node fill:#e6ccff,stroke:#0000ff,stroke-width:2px;
classDef disc fill:#ffffcc,stroke:#cccc00,stroke-width:2px;
classDef log fill:#ffeecc,stroke:#cc6600,stroke-width:2px;
classDef external fill:#e0e0e0,stroke:#333333,stroke-width:2px;
classDef config fill:#d0d0ff,stroke:#000080,stroke-width:2px;
classDef third fill:#f0e68c,stroke:#b8860b,stroke-width:2px;
%% Click Events
click A "https://github.com/captainwc/cyberrt/blob/master/cyber/cyber.cc" _blank
click config "https://github.com/captainwc/cyberrt/tree/master/cyber/conf" _blank
click B1 "https://github.com/captainwc/cyberrt/tree/master/cyber/transport" _blank
click B2 "https://github.com/captainwc/cyberrt/tree/master/cyber/message" _blank
click B3 "https://github.com/captainwc/cyberrt/tree/master/cyber/data" _blank
click B4 "https://github.com/captainwc/cyberrt/tree/master/cyber/io" _blank
click C1 "https://github.com/captainwc/cyberrt/tree/master/cyber/scheduler" _blank
click C2 "https://github.com/captainwc/cyberrt/tree/master/cyber/task" _blank
click C3 "https://github.com/captainwc/cyberrt/tree/master/cyber/timer" _blank
click C4 "https://github.com/captainwc/cyberrt/tree/master/cyber/croutine" _blank
click D1 "https://github.com/captainwc/cyberrt/tree/master/cyber/node" _blank
click D2 "https://github.com/captainwc/cyberrt/tree/master/cyber/service" _blank
click D3 "https://github.com/captainwc/cyberrt/tree/master/cyber/parameter" _blank
click D4 "https://github.com/captainwc/cyberrt/tree/master/cyber/component" _blank
click E1 "https://github.com/captainwc/cyberrt/tree/master/cyber/service_discovery" _blank
click E2 "https://github.com/captainwc/cyberrt/tree/master/cyber/class_loader" _blank
click F1 "https://github.com/captainwc/cyberrt/tree/master/cyber/logger" _blank
click F2 "https://github.com/captainwc/cyberrt/tree/master/cyber/record" _blank
click G1 "https://github.com/captainwc/cyberrt/tree/master/cyber_py3" _blank
click G2 "https://github.com/captainwc/cyberrt/tree/master/cyber/tools" _blank
click H1 "https://github.com/captainwc/cyberrt/tree/master/third_party" _blank
CyberRT的协程
graph TB
%% 定义样式
classDef configClass fill:#e1f5fe,stroke:#01579b
classDef initClass fill:#e8f5e9,stroke:#1b5e20
classDef routineClass fill:#fff3e0,stroke:#e65100
classDef scheduleClass fill:#f3e5f5,stroke:#4a148c
classDef resourceClass fill:#fbe9e7,stroke:#bf360c
%% 配置加载模块
subgraph ConfigurationModule[配置加载模块]
A1[cyber/conf/scheduler.conf]:::configClass --> B1[加载调度策略]:::configClass
A2[cyber/conf/choreography.conf]:::configClass --> B2[加载编排配置]:::configClass
A3[cyber/conf/classic.conf]:::configClass --> B3[加载经典配置]:::configClass
B1 & B2 & B3 --> C1[SchedulerFactory::Instance]:::configClass
end
%% 初始化模块
subgraph InitializationModule[初始化模块]
D1[cyber::Init]:::initClass --> E1[创建Node]:::initClass
E1 --> F1[创建Component]:::initClass
F1 --> G1[注册回调函数]:::initClass
end
%% 协程创建模块
subgraph RoutineModule[协程创建和管理模块]
H1[new CRoutine创建协程]:::routineClass --> I1[初始化RoutineContext]:::routineClass
I1 --> J1[分配栈空间]:::routineClass
J1 --> K1[设置入口函数]:::routineClass
K1 --> L1[设置初始状态READY]:::routineClass
end
%% 调度模块
subgraph SchedulerModule[调度模块]
M1[Scheduler::Instance]:::scheduleClass --> N1{调度策略选择}:::scheduleClass
N1 -->|Choreography| O1[ChoreographyContext]:::scheduleClass
N1 -->|Classic| P1[ClassicContext]:::scheduleClass
O1 & P1 --> Q1[Processor::Run]:::scheduleClass
Q1 --> R1[NextRoutine获取协程]:::scheduleClass
R1 --> S1[Resume执行协程]:::scheduleClass
S1 --> T1[Yield让出执行权]:::scheduleClass
T1 --> R1
end
%% 资源管理模块
subgraph ResourceModule[资源管理模块]
U1[CCObjectPool管理]:::resourceClass --> V1[协程上下文池]:::resourceClass
V1 --> W1[内存分配/释放]:::resourceClass
X1[ProcessorManager]:::resourceClass --> Y1[CPU亲和性设置]:::resourceClass
Y1 --> Z1[处理器调度]:::resourceClass
end
%% 状态转换模块
subgraph StateModule[状态管理模块]
STATE_READY[READY状态]
STATE_RUNNING[RUNNING状态]
STATE_SLEEP[SLEEP状态]
STATE_IO_WAIT[IO_WAIT状态]
STATE_DATA_WAIT[DATA_WAIT状态]
STATE_FINISHED[FINISHED状态]
STATE_READY --> STATE_RUNNING
STATE_RUNNING --> STATE_SLEEP
STATE_RUNNING --> STATE_IO_WAIT
STATE_RUNNING --> STATE_DATA_WAIT
STATE_RUNNING --> STATE_FINISHED
STATE_SLEEP & STATE_IO_WAIT & STATE_DATA_WAIT --> STATE_READY
end
%% 模块间的连接
ConfigurationModule --> InitializationModule
InitializationModule --> RoutineModule
RoutineModule --> SchedulerModule
SchedulerModule --> ResourceModule
SchedulerModule --> StateModule
%% 关键文件注释
%% note1["/cyber/croutine/croutine.h"]
%% note2["/cyber/scheduler/scheduler.h"]
%% note3["/cyber/scheduler/processor.h"]
%% note4["/cyber/croutine/routine_context.h"]