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

    你可能感兴趣的文章
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>
    Nuget~管理自己的包包
    查看>>
    NuGet学习笔记001---了解使用NuGet给net快速获取引用
    查看>>
    nullnullHuge Pages
    查看>>
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>
    Numix Core 开源项目教程
    查看>>
    numpy
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 或 scipy 有哪些可能的计算可以返回 NaN?
    查看>>
    numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
    查看>>
    numpy 数组与矩阵的乘法理解
    查看>>
    NumPy 数组拼接方法-ChatGPT4o作答
    查看>>
    numpy 用法
    查看>>
    Numpy 科学计算库详解
    查看>>