博客
关于我
【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/

    你可能感兴趣的文章
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>
    pm2 start命令中的json格式详解
    查看>>
    pm2启动报错
    查看>>
    pm2通过配置文件部署nodejs代码到服务器
    查看>>
    PML调用PDMS内核命令研究
    查看>>