tars客户端(二):请求包从主调线程到网络线程的过程

本文深入探讨了在tars框架中,主调线程如何通过线程私有数据ServantProxyThreadData与网络线程交互,完成RPC请求的传递。详细阐述了请求队列、序列号分配、网络线程选择算法以及epoll事件触发的处理过程,揭示了内部的通信机制。
摘要由CSDN通过智能技术生成

一.主调线程的线程私有数据

主调线程不是固定的,可以是业务自己创建的线程,或者是服务端的handle线程,甚至是客户端的网络线程(调用框架其他节点的rpc接口),为了能保存rpc调用的上下文,每个主调线程会创建自己的线程私有数据ServantProxyThreadData。在ServantProxy::invoke()里,可以看到获取私有线程数据:

void ServantProxy::invoke(ReqMessage * msg, bool bCoroAsync)                                                                   
{                                                                                                                              
    msg->proxy         = this;                                                                                                 
    msg->response.iRet = TARSSERVERUNKNOWNERR;                                                                                 
                                                                                                                               
    //线程私有数据                                                                                                             
    ServantProxyThreadData * pSptd = ServantProxyThreadData::getData();                                                        
    assert(pSptd != NULL); 

    ..........
}

ServantProxyThreadData的主要成员如下:

class ServantProxyThreadData : public TC_ThreadPool::ThreadData                                                                
{                                                                                                                              
public:                                                                                                                        
    static TC_ThreadMutex _mutex;  //全局的互斥锁                                                                              
    static pthread_key_t  _key;    //私有线程数据key                                                                           
    static SeqManager *   _pSeq;   //生成seq的管理类                                                                           
                                                                                                                               
                                                                           
........................

                                                                                                  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值