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


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
10月前
|
存储 算法
TreadLocal源码分析
TreadLocal源码分析
|
10月前
vivid源码分析
vivid源码分析
47 0
|
存储 SQL 分布式计算
【源码解读】| LiveListenerBus源码解读(下)
【源码解读】| LiveListenerBus源码解读
133 0
【源码解读】| LiveListenerBus源码解读(下)
|
缓存 分布式计算 监控
【源码解读】| LiveListenerBus源码解读(上)
【源码解读】| LiveListenerBus源码解读
137 0
【源码解读】| LiveListenerBus源码解读(上)
|
存储 分布式计算 监控
【源码解读】|SparkEnv源码解读
【源码解读】|SparkEnv源码解读
106 0
|
存储
HashMap源码解读(下篇)
HashMap源码解读(下篇)
80 0
HashMap源码解读(下篇)
|
存储 数据采集 运维
结合 Sentinel 专栏谈谈我的源码阅读方法
结合 Sentinel 专栏谈谈我的源码阅读方法
结合 Sentinel 专栏谈谈我的源码阅读方法
|
存储 缓存 JSON
tinydb 源码阅读
TinyDB是一个小型,简单易用,面向文档的数据库;代码仅1800行,纯python编写。TinyDB项目大小刚好,学习它可以了解NOSQL数据库的实现。
386 0
tinydb 源码阅读
|
存储 Java 数据库
Java集合源码分析之开篇
初衷 Java集合是我们使用最频繁的工具,也是面试的热点,但我们对它的理解仅限于使用上,而且大多数情况没有考虑过其使用规范。本系列文章将跟随源码的思路,分析实现的每个细节,以期在使用时避免各种不规范的坑。在这里,我们会惊艳于开发者优秀的设计,也会感激先辈们付出的艰辛努力,更重要的是知其所以然,少犯错误,写出优秀的代码。 许多人对集合类的理解是暴力的,当需要保存对象时就使用ArrayList,当需要保存键值对时就使用HashMap,当需要不可重复时就使用HashSet,等等。而且使用方式也比较单一:
166 0
|
Java 数据库 容器
spring源码-开篇
  一、写博客也有一段时间了,感觉东西越来越多了,但是自己掌握的东西越来越少了,很多时候自己也在想。学那么多东西,到头来知道的东西越来越少了。是不是很奇怪,其实一点都不奇怪。   我最近发现了一个很大的问题,就是自己做开发这么久了。
2122 0