SEDA源码解读(二)

接着上一篇的话题,本篇继续探讨SEDA的实践项目——sandstorm。

首先,看看package里面的类文件:

ResponseTimeControllerIF:该接口代表一个响应时间的控制器,通常情况下被stage的线程管理器执行,以执行事件准入控制策略来达到特定响应时间的目标。

StageStatsIF:该接口允许各种各样的系统组件在执行时记录以及收集关于stage的统计。

StageWrapperIF:它是一个应用程序stage的内部表示,一个applicationstage包含一个event
handler和一组队列集合。

SystemManagerIF:它是一个内部接口,允许模块访问系统级别的特性。比如现在,它允许一个模块访问、创建、销毁一个线程管理器。它也允许一个模块创建一个属于它自己的stage。

ThreadManagerIF:该接口表示在跨一系列的stage上用来创建、管理以及调度线程。

接下来,我们再来看一下package:seda.sandstorm.core:

注:由于该package主要提供了对于api包中一些接口的实现,为了关系图的清晰,这里就没有再画出各个组件之间的关联关系。

BufferElement:可以看到该类实现了接口QueueElementIF,我们曾经在第一篇说过,每个事件都必须实现QueueElementIF接口,而这里我们可以将该类理解为一个事件的内存缓冲区(即一个事件的内存表示)。

NullElement:这是一个空事件,它可以在信号(第一篇有描述)中使用。

FiniteQueue:从图中的继承关系我们就可以看出,它是一个可监控的队列的实现(关于两个接口的说明,参见第一篇)。它用一个linked
list实现了一个简单的队列。

MulticlassRateLimitingPredicate:该入队断言实现了多级输入速率策略。

QueueThresholdPredicate:该入队断言实现了关于队列大小的阈值策略。

RateLimitingPredicate:该入队断言实现了输入速率策略。

SimpleSink:它是一个抽象类,从继承关系可以看出,它实现了一个可监控的“队列槽端”(SinkIF),但它对于SinkIF大部分的管理方法都没有给予实质的实现。该类可以被继承,以实现简单的SinkIF(对于所有通常的案例大部分不需要有特殊的行为)。

ssLinkedList:它只是linked
list的一个抽象,以支持非常有效的插入和删除,就如同一个枚举接口一样。该linked list中没有方法是同步的。

ssLinkedListComparator:该接口允许你查找ssLinkedList里面的元素。

ssLinkedListEqualityComparator:该类实现了ssLinkedListComparator以为ssLinkedList提供一个匹配对象的比较器。

ssTimer:该类给注册定时器事件提供一种方案,定时器事件将在未来的某个时间消失。未来的某个时间可以被标识为相对的或者绝对的。当定时器倒计时结束,一个事件会被放入队列。这里,没有办法取消一个定时器。事件将被提供保证,但它们提供的时间可能是“可变动的”,这取决于如何加载系统等。

TimeStampedEvent:这是一个对于那些希望追加一个时间戳的事件而产生的超类。它可以被用来记录和控制。

总结

上一篇我们梳理了api包。本篇梳理api.internel以及core包。总的来说,api提供了一些最基本的基层接口。

而本篇谈到的这两层,在api包上面提供了一些特定的实现。

三个包的关系如下:

论文地址:

http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf

项目源码见第一篇中的链接:

http://blog.csdn.net/yanghua_kobe/article/details/7423977

原文发布时间为:2012-04-08

本文作者:vinoYang

时间: 2025-01-11 13:07:42

SEDA源码解读(二)的相关文章

SEDA源码解读(三)

本篇,我们继续来看看seda的开源项目sandstorm,这次我们主要关注aDisk包的实现: AFile-通过上一篇我们对SimpleSink的介绍可以看出这是一个对于队列"槽端"的实现,事实上你会发现它并没有真正提供实现,这是一个文件对外的异步访问接口.既然它实现了SinkIF(因为SimpleSink实现了该接口,所以被其继承),那它就可以入队所有对于某一文件的特定请求. AFileImpl-该类是一个内部类,只提供了包级别的访问权限,它表示了对于AFile的"实现&q

jQuery选择器源码解读(二):select方法_jquery

/* * select方法是Sizzle选择器包的核心方法之一,其主要完成下列任务: * 1.调用tokenize方法完成对选择器的解析 * 2.对于没有初始集合(即seed没有赋值)且是单一块选择器(即选择器字符串中没有逗号), * 完成下列事项: * 1) 对于首选择器是ID类型且context是document的,则直接获取对象替代传入的context对象 * 2) 若选择器是单一选择器,且是id.class.tag类型的,则直接获取并返回匹配的DOM元素 * 3) 获取最后一个id.cl

Ajax::prototype 源码解读_javascript技巧

AJAX之旅(1):由prototype_1.3.1进入javascript殿堂-类的初探  还是决定冠上ajax的头衔,毕竟很多人会用这个关键词搜索.虽然我认为这只是个炒作的概念,不过不得不承认ajax叫起来要方便多了.所以ajax的意思我就不详细解释了. 写这个教程的起因很简单:经过一段时间的ajax学习,有一些体会,并且越发认识到ajax技术的强大,所以决定记录下来,顺便也是对自己思路的整理.有关这个教程的后续,请关注http://www.x2design.net 前几年,javascri

jQuery 1.5 源码解读 面向中高阶JSER_jquery

几乎很难从jQuery分离其中的一部分功能.所以在这里我分享下应该读 jQuery 源码的一些成果,以及读源码的方法.啃代码是必须的. 1. 代码折叠是必须的. 因此必须在支持语法折叠的编辑器里打开源码. 根据折叠层次,我们可以很快知道: 所有 jQuery 的代码都在一个函数中: (function( window, undefined ) {// jQuery 代码 })(window); 这样可以避免内部对象污染全局.传入的参数1是 window, 参数2是 undefined , 加快j

CI框架源码解读之利用Hook.php文件完成功能扩展的方法_php实例

本文实例讲述了CI框架源码解读之利用Hook.php文件完成功能扩展的方法.分享给大家供大家参考,具体如下: 看了hook.php的源码,就知道CI使用hook来进行扩展的原理了. hook的基本知识 http://codeigniter.org.cn/user_guide/general/hooks.html CI中hook的使用经历了一个:开启hook,定义hook,调用hook,执行hook的过程. 手册中已经告知了开启.定义.调用的方法.那么hook的实现原理是啥呢. <?php if

一个引用java接口但任何没有实现的源码解读

问题描述 一个引用java接口但任何没有实现的源码解读 有个类一直无法理解,情况是这样的,该类有个内部接口,确定没有任何实现方法,怀疑代码不全需要自己补充,请高手支招确定下,第一次发帖,望大家捧捧场,谢谢! PresenceEventDispatcher继承的一个引用自己内部接口的抽象类,有"<"刚被csdn隐藏了 public class PresenceEventDispatcher extends EventDispatcher<PresenceEventDispat

jQuery源码解读之removeAttr()方法分析

 这篇文章主要介绍了jQuery源码解读之removeAttr()方法分析,较为详细的分析了removeAttr方法的实现技巧,非常具有实用价值,需要的朋友可以参考下     本文较为详细的分析了jQuery源码解读之removeAttr()方法.分享给大家供大家参考.具体分析如下: 扩展jQuery原型对象的方法: 代码如下: jQuery.fn.extend({ //name,传入要DOM元素要移除的属性名. removeAttr: function( name ) {   //使用jQue

jQuery源码解读之hasClass()方法分析

 这篇文章主要介绍了jQuery源码解读之hasClass()方法,以注释形式较为详细的分析了hasClass()方法的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文较为详细的分析了jQuery源码解读之hasClass()方法.分享给大家供大家参考.具体分析如下:   代码如下: jQuery.fn.extend({ hasClass: function( selector ) { //将要检查的类名selector赋值给className, l为选择器选择的当前要检查的j

jQuery源码解读之addClass()方法分析

 这篇文章主要介绍了jQuery源码解读之addClass()方法,注释形式较为详细的分析了addClass()方法的实现技巧与相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下     本文较为详细的分析了jQuery源码解读之addClass()方法.分享给大家供大家参考.具体分析如下: 给jQuery原型对象扩展addClass功能,jQuery.fn就是jQuery.prototype 代码如下: jQuery.fn.extend({ /* 可以看出这是一个函数名叫addClass