标签:RT Indicator 函数 概括 Writer Transmitter cyber manager channel
用户通过调用CreateNode
函数创造一个节点,该函数是在节点类Node的友元函数。
Nodel类的成员变量·node_channel_impl(NodeChannellmpl)负责创建Reader和Writer。
Writer类中包含transmitter_ , change_conn_, channel_manager_,及JoinTheTopology
函数。
Writer类在初始化过程中会调用函数transport::Transport::Instance()->CreateTransmitter<MessageT>(role_attr_)
为transmitter_,默认情况下是OptionalMode::HYBRID
混合通信,但本次分析主要以OptionalMode::SHM
进程间通信为主。
在生成一个SHM形式的Transmitter后,会调用transmitter->Enable()
,初始化这个Transmitter。Transmitter类主要含有成员变量segment_和 notifier_ ,Transmitter使能的过程就是为segment_和 notifier_赋值的过程,Segment类负责管理共享内存。notifier_最终会指向一个ConditionNotifier或MulticastNotifier。
对于ConditionNotifier,它包含一个Indicator结构体,Indicator包含ReadableInfo数组和一个条件变量,Indicator会在另一块共享内存中。写进程通过Indicator中的条件变量通知读进程有数据到达。读进程得到通知后会读取Indicator中的某个ReadableInfo,然后根据此ReadableInfo信息从Segment管理的内存中获取数据。
channel_manager_会被赋值channel_manager_ = service_discovery::TopologyManager::Instance()->channel_manager()
负责管理channel,每创建一个Writer或Reader都会生成一个channel。
在函数JoinTheTopology
中负责拓扑网络的管理
Shmdispatcher类中有一个单独进程ThreadFunc()负责监听消息,OnMessage会触发DatatDispatcher从公共内存中读取消息并放置于DataVisitor,每个DataVisitor都对应一个CRoutine,而明每个CRoutine都会封装一个用户回调函数。
Processor中的Run()函数会循环执行,每次选择一个CRoutine进行执行。
协程之间的切换主要之上下文切换,ctx_swap函数实现上下文的切换,主要做两点工作:保存当前寄存器信息、替换函数返回地址。实际上当返回地址改变时,当函数返回时,接下来执行的指令也就转移了。
标签:RT,Indicator,函数,概括,Writer,Transmitter,cyber,manager,channel 来源: https://blog.csdn.net/qq_38966867/article/details/114288135
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。