正在加载图片...
因特网的宏伟蓝图是将这个世界上所有的计算机都连接起来,形成一个无比巨大的计算资 源。如果能把本地调用和远程调用等同起来,那么无论是分析蛋白质的成分还是破解外太空 的信号,使用者都无需考虑机器的物理位置,剩下来的只有愉快地计算。 但是非常不幸,本地调用和远程调用是完全不同的东西。在现有的技术水平之下,网络通信 仍然是一件代价高昂的事情(也就是说,通常很慢,而且并不可靠)。在没有网络调用的情 况中,不同的方法和函数以及它们所操作的数据都位于相同的本地内存中(图1-6),向方 法内传递数据并且获得方法的返回结果是非常直接的。 模型 (本鲍内存 图1-6本地过程调用的顺序图。参与者很少,因为程序逻辑与数 据模型都保存在本地内存中,并且彼此可以直接访问 而在有远程调用的情况下,位于网络两端的通信双方为了发送和接收数据在底层需要进行大 量计算(图1-7)。比起数据在线路上的往返,这些计算需要消耗更多的时间。传输一段二 进制的数据,中间要经过很多环节的编码和解码、错误校验、失败重发、数据包拆分和重组, 数据最终转化为0和1表示的二进制信号,通过线路(或者无线连接)到达另外一方 在本地,调用函数的调用请求被编码为一个对象,然后将这个对象序列化为一系列字节,最 后使用应用层协议(通常是HIP)通过物理传输介质(例如铜缆、光纤或者无线电波)将 其发送出 在远程机器上,对应用层协议解码,将获得的数据字节反序列化,创建一个请求对象的副本 然后对数据模型应用这个对象并生成一个响应对象。为了将响应对象传递给本地的调用函 数,所有的序列化、反序列化以及传输层的操作都要反向再来一次。最后,响应对象被传递 给本地的调用函数。 本炮模型序列化》)感用协议)物理传输应用议序列化远程模型 图1-7远程过程调用的顺序图。一台机器的程序逻辑尝试操作另外一台机器上的数据模型 这个交互过程很复杂吧,幸好,它是可以自动完成的。现代的编程环境如Java和 Microsoft 的NET框架都内置了这个能力。尽管如此,执行远程调用时,上述所有这些操作仍然会在 内部执行。如果我们到处使用远程调用,性能势必会大受影响。 这也就是说,远程调用是不可能和本地调用一样有效率的。更糟糕的是,网络的不稳定更让因特网的宏伟蓝图是将这个世界上所有的计算机都连接起来,形成一个无比巨大的计算资 源。如果能把本地调用和远程调用等同起来,那么无论是分析蛋白质的成分还是破解外太空 的信号,使用者都无需考虑机器的物理位置,剩下来的只有愉快地计算。 但是非常不幸,本地调用和远程调用是完全不同的东西。在现有的技术水平之下,网络通信 仍然是一件代价高昂的事情(也就是说,通常很慢,而且并不可靠)。在没有网络调用的情 况中,不同的方法和函数以及它们所操作的数据都位于相同的本地内存中(图 1-6),向方 法内传递数据并且获得方法的返回结果是非常直接的。 图 1-6 本地过程调用的顺序图。参与者很少,因为程序逻辑与数 据模型都保存在本地内存中,并且彼此可以直接访问 而在有远程调用的情况下,位于网络两端的通信双方为了发送和接收数据在底层需要进行大 量计算(图 1-7)。比起数据在线路上的往返,这些计算需要消耗更多的时间。传输一段二 进制的数据,中间要经过很多环节的编码和解码、错误校验、失败重发、数据包拆分和重组, 数据最终转化为 0 和 1 表示的二进制信号,通过线路(或者无线连接)到达另外一方。 在本地,调用函数的调用请求被编码为一个对象,然后将这个对象序列化为一系列字节,最 后使用应用层协议(通常是 HTTP)通过物理传输介质(例如铜缆、光纤或者无线电波)将 其发送出去。 在远程机器上,对应用层协议解码,将获得的数据字节反序列化,创建一个请求对象的副本。 然后对数据模型应用这个对象并生成一个响应对象。为了将响应对象传递给本地的调用函 数,所有的序列化、反序列化以及传输层的操作都要反向再来一次。最后,响应对象被传递 给本地的调用函数。 图 1-7 远程过程调用的顺序图。一台机器的程序逻辑尝试操作另外一台机器上的数据模型 这个交互过程很复杂吧,幸好,它是可以自动完成的。现代的编程环境如 Java 和 Microsoft 的.NET 框架都内置了这个能力。尽管如此,执行远程调用时,上述所有这些操作仍然会在 内部执行。如果我们到处使用远程调用,性能势必会大受影响。 这也就是说,远程调用是不可能和本地调用一样有效率的。更糟糕的是,网络的不稳定更让
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有