博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ceph源码网络模块读取数据流程
阅读量:6873 次
发布时间:2019-06-26

本文共 1103 字,大约阅读时间需要 3 分钟。

hot3.png

1、从osd->init()开始,启动osd模块

2、client_messenger->add_dispatcher_head(this);
  cluster_messenger->add_dispatcher_head(this);
  hbclient_messenger->add_dispatcher_head(&heartbeat_dispatcher);
  hb_front_server_messenger->add_dispatcher_head(&heartbeat_dispatcher);
  hb_back_server_messenger->add_dispatcher_head(&heartbeat_dispatcher);
注册不同的dispatcher
3、在add_dispatcher_head函数中把dispatcher加入到list<Dispatcher*>列表中
4、接着调用simplemessenger类中的ready()正式开始启动和通信相关的部分。
5、在ready()函数中调用dispatch_queue.start()启动分发线程,等待被唤醒,在dispatch_queue.start()中调用msgr->ms_deliver_dispatch(m);分发任务给list<Dispatcher*>中的dispatcher,最后调用(*p)->ms_dispatch(m),调用不同dispatcher的ms_dispatch处理消息。
6、在ready()函数中调用accepter.start();启动accepter线程进入entry()函数,在entry()函数中调用msgr->add_accept_pipe(sd);注册一个pipe,启动读线程,从该sd中读取数据,start_reader();---- reader_thread.create(),create函数会调用Reader线程的entry() 启动pipe类中的reader函数从sd中读数据,调用in_q->enqueue(m, m->get_priority(), conn_id); 把接收到的messenger加入到mqueue中最后调用cond.Signal()唤醒dispatch_queue.start() 启动的dispatchThread,进入entry进行处理

 

参考:http://bean-li.github.io/ceph-network-message-3/

转载于:https://my.oschina.net/u/2326998/blog/840554

你可能感兴趣的文章
Eclipse CDT 调用printf/cout 控制台(console)无输出
查看>>
CMS模板引擎:XHtmlAction
查看>>
被吃掉的Linux内存
查看>>
创建交换分区的两个命令
查看>>
AMD发布带全新APU的新LINUX版本驱动
查看>>
【干货】前端rem单位的正确使用姿势
查看>>
从0开始写JavaWeb框架系列(2)从0开始写SamrtFrameWork:开发一个类加载器
查看>>
Golang通过http代理抓取页面代码
查看>>
AbstractQueuedSynchronizer在工具类Semaphore、CountDownLatch、ReentrantLock中的应用和CyclicBarrier...
查看>>
android 图片 透明框的问题
查看>>
晚上睡不着,起身看算法
查看>>
windows 下安装Chocolatey(强大的软件包管理工具)
查看>>
SIFT算法学习小记(转)
查看>>
中山野鬼 linux 下 C 编程和make的方法 (七、补充,模块化项目组织的Makefil...
查看>>
IOS随机生成随机数
查看>>
Nodejs sublime text 3配置
查看>>
Apache2.2+Tomcat6集群配置
查看>>
装完 VirsualStudio后VirtualBox无法正常使用
查看>>
网站运营,从一条日志说起
查看>>
开源网校系统 在线教育
查看>>