hadoop的rpc同异步转换原理

一、hadoop通过call的wait和notify方式实现异步消息交互和同步调用的转换。

      调用者线程首先创建动代理,在实现InvocationHandler接口的invoke方法中,通过调用rpc.client.call(Invocation,RemoteServerID),在client的call方法中将Invocation作为参数创建Call对象,发送请求后,Call对象.wait()等待响应结果返回,当Server.handler线程取得结果后,会notify调用者线程,通知其结果返回。

二、同异步转换原理。

         hadoop的rpc底层使用异步发送数据;上层以同步方式暴露接口。客户端发起的RPC调用是同步的,而服务端处理RPC调用是异步的。客户端调用线程以阻塞同步的方式发起RPC连接及RPC调用,将参数等信息发送给Listener,然后等待Connection接收响应返回。Listener负责接收RPC连接和RPC数据,当一个Call的数据接收完后,组装成Call,并将Call放入由Handler提供的Call队列中。Handler线程监听Call队列,如果Call队列不为空,则按FIFO方式取出Call,并转为实际调用,以非阻塞方式将响应发回给Connection,未发送完毕的响应交给Responder处理。

交互过程如下图所示:

参考: http://www.alidata.org/archives/1413
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值