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博客。

目录
相关文章
|
Java 数据库连接 数据库
源码分析系列教程(完) - 终章总结
源码分析系列教程(完) - 终章总结
72 0
源码分析系列教程(完) - 终章总结
|
3月前
|
Java 编译器 程序员
小心踩坑!s1 = s1 + 1 和 s1 += 1 的区别你真的懂吗?
小米,一位29岁的技术爱好者,通过一个Java面试题解析了隐式类型转换与赋值运算符特性的知识点。题目涉及`short s1 = 1; s1 = s1 + 1;`与`short s1 = 1; s1 += 1;`的区别,前者因类型不匹配报错,后者则因`+=`运算符的隐式类型转换功能而成功编译。小米通过故事化讲解,深入浅出地解释了Java中数据类型转换的规则及其背后的逻辑,帮助读者更好地理解和记忆这一知识点。
55 3
|
6月前
|
存储 负载均衡 API
服务发现原理分析与源码解读
服务发现原理分析与源码解读
|
6月前
|
存储 缓存 前端开发
EaselJS 源码分析系列--第三篇
EaselJS 源码分析系列--第三篇
|
6月前
|
存储 前端开发 JavaScript
EaselJS 源码分析系列--第四篇
EaselJS 源码分析系列--第四篇
|
Java 容器 Spring
Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_3细说invokeBeanDefinitionRegistryPostProcessors
Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_3细说invokeBeanDefinitionRegistryPostProcessors
83 0
Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_3细说invokeBeanDefinitionRegistryPostProcessors
|
缓存 分布式计算 监控
【源码解读】| LiveListenerBus源码解读(上)
【源码解读】| LiveListenerBus源码解读
199 0
【源码解读】| LiveListenerBus源码解读(上)
|
存储 SQL 分布式计算
【源码解读】| LiveListenerBus源码解读(下)
【源码解读】| LiveListenerBus源码解读
186 0
【源码解读】| LiveListenerBus源码解读(下)
|
存储
HashMap源码解读(下篇)
HashMap源码解读(下篇)
127 0
HashMap源码解读(下篇)
|
存储 Java 对象存储
HashMap源码解读(上篇)
HashMap源码解读(上篇)
149 0
HashMap源码解读(上篇)

热门文章

最新文章

相关实验场景

更多