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状态。

 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lspci安装_linux下查看pci设备详细信息

    lspci安装_linux下查看pci设备详细信息lspci命令可以列出所有的PCI设备,比如主板,显卡和网卡等,也会把USB接口设备列出来,用最小化安装centos7,bash里默认不带lspci命令,需要手动安装:yum-yinstallpciutils 转载于:https://blog.51cto.com/229470383/1782898…

    2022年9月9日
    0
  • 深入浅出谈开窗函数(一)

    深入浅出谈开窗函数(一)

    2021年12月5日
    239
  • github 网络安全_黑客编程语言

    github 网络安全_黑客编程语言这个开源项目是黑客的多合一工具包,包含了各种黑客工具,比如逆向工程、老鼠工具、SQL注入工具等等。声明:该开源项目仅限学习使用,勿用与从事违法活动。开源地址:https://github.com/Z4nzu/hackingtool这个开源项目是教程序员如何优雅地挣零花钱,本开源项目是一本电子书,从副业的重要性、到程序员可能得副业路径,以及知识付费、课程录制等实战案例为基础,打磨的一本程序员副业指南。开源地址:https://github.com/easychen/lean-side-bussiness“Aw

    2022年9月2日
    2
  • ipad分屏功能怎么使用_es6 reflect

    ipad分屏功能怎么使用_es6 reflectpadStart方法使用说明jspadStart是什么padStart()方法用另一个字符串填充当前字符串(如果需要的话,会重复多次),以便产生的字符串达到给定的长度。从当前字符串的左侧开始填充。实例’abc’.padStart(10);//”abc”‘abc’.padStart(10,”foo”);//”foofoofabc”‘abc’.padStart(6,”123465″);//”123abc”‘abc’.padStart(8,”0″)

    2022年9月8日
    0
  • 据说很快的数据库分页存储过程

    据说很快的数据库分页存储过程

    2021年5月4日
    112
  • java调用ping命令_ping网址的命令格式

    java调用ping命令_ping网址的命令格式使用java 执行ping命令

    2022年4月21日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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