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

    你可能感兴趣的文章
    Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
    查看>>
    node-request模块
    查看>>
    Node.js 8 中的 util.promisify的详解
    查看>>
    Node.js 函数是什么样的?
    查看>>
    Node.js 历史
    查看>>
    Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
    查看>>
    Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
    查看>>
    Node.js 异步模式浅析
    查看>>
    node.js 怎么新建一个站点端口
    查看>>
    Node.js 文件系统的各种用法和常见场景
    查看>>
    Node.js 的事件循环(Event Loop)详解
    查看>>
    node.js 简易聊天室
    查看>>
    Node.js 线程你理解的可能是错的
    查看>>
    Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>