博客
关于我
【TARS】TARS-CPP客户端学习二
阅读量:763 次
发布时间:2019-03-23

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

TARS客户端线程与异步调用的实现分析

1. 客户端线程分布与初始化

TARS客户端的线程分布主要由以下几个部分组成:

1.1 线程总体分布

客户端线程主要分为主线程和次要线程两大类:

  • 主线程(main线程):负责初始化客户端代理,并管理客户端的逻辑流程。
  • 次要线程:用于处理网络通信、异步回调等任务。

这些线程通过一些同步机制(如互斥锁)互相协调,确保资源的安全使用。


2. 线程与源码分析

2.1 从调用流程看线程分布

通过分析stringToProxygetServantProxyinitialize等函数的实现,可以清晰看到线程分配的逻辑:

  • stringToProxy:负责获取服务代理,并将请求打包发送到服务器。
  • getServantProxy:根据配置信息获取服务代理,负责初始化相关资源。
  • initialize:启动客户端的网络线程和异步处理线程。

2.2 getStatReport()与createPropertyReport

getStatReport()createPropertyReport虽然看起来会生成线程,但实际上它们会返回一个空结果,不会真正生成新的线程。这个机制专注于数据统计和性能分析,而不是线程管理。


2.3 _communicatorEpoll[i] -> start()

_communicatorEpoll[i]的启动涉及到两个主要步骤:

  • 初始化ServantProxyFactory,创建对应的CommunicatorEpoll实例。
  • 启动异步回调处理线程。

  • 2.4 Synchronization Call 的线程模型

    同步调用模型采用阻塞式的线程模型:

  • 调用tars_invoke,生成请求包并发送到服务器。
  • 等待服务器的响应,通过条件变量或队列机制保完整性。

  • 3 客户端异步调用的实现

    3.1 异步回调的处理流程

    异步调用通过以下步骤完成:

  • 调用tars_invoke_async,生成请求包并发送到服务器。
  • 等待服务器的响应,通过异步回调处理线程执行用户定义的 回调函数。

  • 3.2 分段处理与跨线程通信

    避免长时间占用单线程通过分段处理和异步通信实现:

    • 请求信息推送至请求队列。
    • 响应信息通过异步回调处理线程进行处理。

    4 负载均衡与技术实现

    TARS的负载均衡策略分为两层:

  • 网络线程层:通过轮询选择不同的ObjectProxy(网络线程)。
  • 连接层:通过负载均衡算法选择不同的AdapterProxy

  • 5 性能优化与考虑因素

  • 线程数量:根据配置管理网络线程和异步线程数量。
  • 队列管理:通过固定大小的队列来限制并发请求。
  • 线程安全:通过锁机制确保线程安全。

  • 结语

    通过分析线程分配、同步与异步调用的实现,可看出TARS框架在客户端监控与处理上具备较高的灵活性和扩展性。其核心思想在于通过多层次的负载均衡和异步模型,为高并发场景提供了强大的支持能力。

    转载地址:http://ssqzk.baihongyu.com/

    你可能感兴趣的文章
    MySQL数据和Redis缓存一致性方案详解
    查看>>
    Mysql数据库 InnoDB存储引擎中Master Thread的执行流程
    查看>>
    MySQL数据库 范式
    查看>>
    Mysql数据库B-Tree索引
    查看>>
    mysql数据库io空闲_mysql数据库磁盘io高的排查
    查看>>
    MYSQL数据库下载安装(Windows版本)
    查看>>
    MySQL数据库与Informix:能否创建同名表?
    查看>>
    Mysql数据库函数contac_函数:函数删除操作语法&使用例——《mysql 从入门到内卷再到入土》...
    查看>>
    mysql数据库命令备份还原
    查看>>
    mysql数据库基础教程
    查看>>
    MySQL数据库备份
    查看>>
    mysql数据库备份与恢复
    查看>>
    Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown_无需整理
    查看>>
    MySQL数据库安装配置与常用命令
    查看>>
    MySQL数据库实现主从同步数据
    查看>>
    mysql数据库导出导入
    查看>>
    mysql数据库扫盲,你真的知道什么是数据库嘛
    查看>>
    mysql数据库批量插入数据shell脚本实现
    查看>>
    MySQL数据库操作
    查看>>
    MySQL数据库故障排错
    查看>>