FastDFS FastTracker 分析(version:3.11)


FastTracker进程总共有9个线程(默认配置, 根据配置文件可以更改工作线程(work_thread_entrance)数量)在运行:

1:

 主进程创建其他进程后主要就是在listen客户端的连接:

tracker_accept_loop:  每当一个连接进来, 就将socket号传递给工作线程work_thread_entrance线程; 传递采用了libevent的peer socket方式传递给工作线程:

write(pThreadData->pipe_fds[1], &incomesock, sizeof(incomesock)) != sizeof(incomesock));

工作线程的选择主要是根据socket号被工作线程数取余的方式选择。因此工作线程是采用线程池的方式工作。


2:

工作线程(work_thread_entrance)将peer socket的另一端pipe_fds[0] 加入到libevent的的事件处理中,处理事件的函数是recv_notify_read;工作线程在libevent提供的处理接口event_base_loop上等待并处理收到 的事件。当收到主进程的accept后的事件后,recv_notify_read就读取accept的socket。获取一个空闲的连接处理任务:fast_task_info; 在socket上设置读和写的事件处理接口client_sock_read和client_sock_write(利用libevent的机制来处理读写)。发送的接口是send_add_event,也是采用事件的方式来发送数据。client_sock_read中处理消息的接口是:tracker_deal_task。


3:

httpd_entrance: 处理http消息的线程,主要由generic_handler来处理http来的事件,也是采用libevent来的事件方式来处理。主要是用于处理http的查询消息。


4:

 http_check_entrance :用于定时检查storage server是否正常,主要是建立到storage的连接是否可以建立。




5:

sched_thread_entrance: 主要来处理一些本地全局变量,storage状态写入文件等事件。 

log_sync_func:  将日志同步到磁盘;

tracker_mem_check_alive: 找出不活动的 storage server,接下来并更改 storage 的状态

fdfs_stat_file_sync_func: 将统计数据同步到磁盘;


6:

relationship_thread_entrance:主要是用于选择leader和维护leader。


后续几个线程写的比较简单,后续完善



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值