Cyber Classloader : https://zhuanlan.zhihu.com/p/91322837
Cyber Component : https://zhuanlan.zhihu.com/p/116782645
component的工作流程大致如下:
- 通過(guò)繼承"cyber::Component"蝠检,用戶自定義一個(gè)模塊,并且實(shí)現(xiàn)"Init()"和"Proc()"函數(shù)。編譯生成".so"文件恭应。
- 通過(guò)classloader加載component模塊到內(nèi)存孽江,創(chuàng)建component對(duì)象贯底,調(diào)用"Initialize()"初始化环础。(Initialize中會(huì)調(diào)用Init)
- 創(chuàng)建協(xié)程任務(wù)荸百,并且注冊(cè)"Process()"回調(diào)闻伶,當(dāng)數(shù)據(jù)到來(lái)的時(shí)候,喚醒對(duì)象的協(xié)程任務(wù)執(zhí)行"Process()"處理數(shù)據(jù)够话。(Process會(huì)調(diào)用Proc)
DataVisitor和DataDispatcher : https://zhuanlan.zhihu.com/p/117318368
數(shù)據(jù)的訪問(wèn)都是通過(guò)"DataVisitor"來(lái)實(shí)現(xiàn)蓝翰,數(shù)據(jù)的分發(fā)通過(guò)"DataDispatcher"來(lái)實(shí)現(xiàn)光绕。reader中也是通過(guò)DataVisitor來(lái)訪問(wèn)數(shù)據(jù),在reader中訂閱對(duì)應(yīng)的DataDispatcher畜份。
也就是說(shuō)如果要訂閱一個(gè)通道诞帐,首先是在reader中注冊(cè)消息的topic,綁定DataDispatcher爆雹,之后對(duì)應(yīng)通道的消息到來(lái)之后停蕉,觸發(fā)DataDispatcher分發(fā)消息,而DataDispatcher通過(guò)DataVisitor中的Notify喚醒協(xié)程钙态,從DataVisitor中獲取消息慧起,并執(zhí)行協(xié)程中綁定的回調(diào)函數(shù),以上就是整個(gè)消息的收發(fā)過(guò)程册倒。
數(shù)據(jù)處理流程 : https://zhuanlan.zhihu.com/p/115046708
Cyber通信上層:https://blog.csdn.net/qq_25762163/article/details/103803032
Cyber通信底層:https://blog.csdn.net/qq_25762163/article/details/103895527
Cyber C++共享內(nèi)存通信的實(shí)現(xiàn): https://blog.csdn.net/qq_25762163/article/details/103945289
Apollo 3.5 Cyber 多進(jìn)程通訊模塊 - Transport (Shared Memory篇):https://blog.csdn.net/weixin_44450715/article/details/86314193