ice学习笔记

引言
通过使远地调用变得像传统的方法调用一样容易,现代中间件技术力图
减轻程序员在转向分布式应用开发时的负担:你调用某个对象上的方法,
当该方法完成时,就会返回结果,或是抛出异常。当然,在分布式系统
中,对象的实现可能会驻留在另一个主机上,从而带来一些语义上的差
异,程序员必须加以注意,比如远地调用的开销,以及可能发生与网络有
关的错误。尽管有这样一些问题,程序员的面向对象编程经验仍然是有用
的,上述的同步编程模型(发出调用的线程会阻塞到操作返回)是我们所
熟悉和容易理解的。
Ice 在本质上是一个异步的中间件平台,出于对应用(及其程序员)的
考虑而模拟了同步的行为。当Ice 应用通过代理、向远地对象发出同步的双
向调用时,发出调用的线程会阻塞起来,以模拟同步的方法调用。在此期间, Ice run time 在后台运行,处理消息,直到收到所需的答复为止,然后
发出调用的线程就可以解除阻塞,解编结果了。
但是,在许多情况下,同步编程的阻塞本质太过受限。例如,在等待远
地调用的响应返回时,应用本来可以另外做一些工作;在这样的情况下使
用同步调用,应用就会被迫把工作推后、等待响应返回,或是在另外一个
线程中执行该工作。如果这些做法都不可接受, Ice 的异步设施提供了一种
有效的解决方案,可以改善性能和可伸缩性,或是简化复杂的应用任务。

异步方法分派
一个服务器在同一时刻所能支持的同步请求数受到Ice run time 的服务
器线程池的尺寸限制(参见15.3 节)。如果所有线程都在忙于分派长时间
运行的操作,那么就没有线程可用于处理新的请求,客户就会经验到不可
接受的无响应状态。
异步方法分派(AMD) 是AMI 的服务器端等价物,能够解决这个可伸缩
性问题。在使用AMD 时,服务器可以接收一个请求,然后挂起其处理,
以尽快释放分派线程。当处理恢复、结果已得出时,服务器要使用Ice run
time 提供的回调对象,显式地发送响应。
用实际的术语说, AMD 操作通常会把请求数据(也就是,回调对象和
操作参数)放入队列 ,供应用的某个线程(或线程池)随后处理用。这
样,服务器就使分派线程的使用率降到了最低限度,能够高效地支持数千
并发客户。
另外, AMD 还可用于需要在完成了客户的请求之后继续进行处理的操
作。为了使客户的延迟降到最低限度,操作在返回结果后,仍留在分派线
程中,继续用分派线程执行其他工作。
关于AMD 的更多信息,参见17.4 节。

总结
同步的远地调用是对本地的方法调用的自然扩展,它利用了程序员的面
向对象编程经验,使初学分布式应用开发的程序员的学习曲线平缓下来。
但是,同步调用的阻塞本质使得有些应用任务的实现变得更为困难,甚至
不可能,因此, Ice 提供了一个直截了当的接口,你可以用这个接口来访问
Ice 的异步设施。
如果使用异步方法调用,发出调用的线程可以调用一个操作,然后马上
就重获控制,不用阻塞起来等待操作完成。当Ice run time 收到结果时,它
会通过回调通知应用。
与此类似,异步方法分派允许servant 在任何时候发送操作的结果,而
不一定要在操作实现中发送。通过把费时的请求放在队列中,后面再进行
处理, servant 可以改善可伸缩性,并节省线程资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值