Ice笔记–Ice的服务器实现技术[通俗易懂]

Ice笔记–Ice的服务器实现技术[通俗易懂]服务器实现技术 1.      渐进的初始化如果我们使用servant定位器,locate返回的servant只能用于当前请求,也就是说Iceruntime不会把这个servant增加到ActiveServantMap中。一种常用的实现技术是,在loca

大家好,又见面了,我是你们的朋友全栈君。

服务器实现技术

 

1.       渐进的初始化

如果我们使用servant定位器,locate返回的servant只能用于当前请求,也就是说Ice run time不会把这个servant增加到Active Servant Map中。

一种常用的实现技术是,在locate中,把每个servant增加到ASM中。这意味着,只有对Ice对象的初次请求会触发对locate的调用;自此之后,与Ice对象对应的servant就可以在ASM中找到,Ice run time不必再调用servant定位器就可以立即分派针对同一个Ice对象的到来请求。

使用一个把servant增加到ASM中的定位器有一些优点:

1)      Servants是随需实例化的,所以servant的初始化代价分散到了许多次调用中,而不是在服务器启动时同时产生。

2)      服务器的内存需求降低了,因为只有当Ice对象被客户实际访问时,servant才会实例化。

2.       缺省Servants

缺省Servants是—它针对每一个请求,充当不同的Ice对象的角色。换句话说,缺省servant会在处理每个请求时,根据请求所访问的对象标识改变其行为。通过这样的方式,客户可以访问数量不限的Ice对象,但却只有一个servant在内存中。

缺省Servants不仅可以节省内存,实现方式也很简单:在本质上,它们就是数据库中对象的持久状态的façade。

要创建缺省servant实现,我们需要的定位器的数量和系统中的非抽象接口的数量一样多。而对于每一个被调用的操作,缺省servant都要进行一次数据库访问,因此它比在内存中缓存状态要慢。

3.       混合途径及缓存

如果我们的应用有一些经常访问的对象,是性能的关键,那么我们可以把针对这些对象的servant增加到ASM中。其他不常被访问的对象可以通过缺省servant实现。

 

4.       Servant逐出器

逐出器是维护有servants缓存的servant定位器:最近最少用的servant处在队列的尾部,最近使用最多的servant处在队列的头部。(按照LRU顺序维护)。

队列的长度可以配置,并决定会有多少servant存放在缓存中:如果针对某个Ice对象的请求在内存中没有对应的servant,而且缓存满了,逐出器就会在队尾移除最近最少用的servant,给要在对头实例化的servant腾出空间。如:

Ice笔记--Ice的服务器实现技术[通俗易懂]

逐出器在访问了servant3之后的情况:

Ice笔记--Ice的服务器实现技术[通俗易懂]

假定下一个客户请求时针对对象标识6的。逐出器中维护servants的缓存已经满了,那么就会在队尾逐出标志位1的servant,如图:

Ice笔记--Ice的服务器实现技术[通俗易懂]

逐出器集合了ASM与缺省Servants的优点:只要缓存尺寸能在内存中容纳servant工作集,大多数的请求都会由已经实例化的servant提供服务,而不用创建servant,并访问数据库来初始化servant状态。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135437.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ASP.NET访问Excel 失败的解决方法(错误号:80070005,8000401a)

    ASP.NET访问Excel 失败的解决方法(错误号:80070005,8000401a)用asp.net把值写入Excel在本地测试通过,然后提交服务器后老是写入不成功 并提示错误:RetrievingtheCOMclassfactoryforcomponentwithCLSID{00024500-0000-0000-C000-000000000046}failedduetothefollowingerror:80070005.在网络上查找了许多资料,

  • CentOs6.5升级内核到3.0+[通俗易懂]

    CentOs6.5升级内核到3.0+[通俗易懂]1、查看内核版本 命令: uname -a 2、导入key 命令: rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 如果报SSL错误, 则需要更新网络安全服务 yum update nss3、安装elrepo的yum源命令:rpm -U…

  • flake8 格式化代码_java代码规范

    flake8 格式化代码_java代码规范flake8(代码规范利器)概述flake8是下面三个工具的封装:1)PyFlakes2)Pep83)NedBatchelder’sMcCabescriptFlake8的下载地址:https://pypi.python.org/pypi/flake8,优点是可扩展。Flake8通过启动单独的flake8脚本运行所有工具,它在一个Per文件中显示告警,合并到输出中…

  • myeclipse svn插件失效

    myeclipse svn插件失效最近经常遇到这个问题,在myeclipse2016上安装svn插件是将site目录copy到dropins目录下,可能这样做会导致以后安装其他新插件时,svn插件会失效,解决方案如下:找到myeclipse安装目录下的configuration目录下的org.eclipse.update包,然后把它删除,重启myeclipse,svn就会重新出现了!麻烦 …

  • PHP declare 之 strict_types=1

    PHP declare 之 strict_types=1

    2021年10月30日
  • IP地址的分类及范围

    IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的?大家都知道现在的互联网使用的是32位地址,IPv6虽然也说了好些年,但大家都习惯接受IPv4的用法说法。IP以点分十进制表示,如172.16.0.0。地址格式为:IP地址=网络地址+主机地址或IP地址=主机地址+子网地址+主机地址。IP地址类型最初设计互联网络时,为了便于寻址以及层次化构造网络…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号