相关疑难解决方法(0)

缓存失效 - 是否有通用解决方案?

"计算机科学只有两个难题:缓存失效和命名事物."

菲尔卡尔顿

是否存在使缓存无效的通用解决方案或方法; 要知道某个条目何时过时,所以您可以保证始终获得最新数据?

例如,考虑一个getData()从文件中获取数据的函数.它根据文件的最后修改时间对其进行缓存,每次调用时都会检查该文件.
然后添加第二个函数transformData()来转换数据,并在下次调用函数时缓存其结果.它不知道该文件 - 如何添加依赖关系,如果文件被更改,此缓存将变为无效?

您可以在getData()每次调用时transformData()调用它并将其与用于构建缓存的值进行比较,但这可能最终成本非常高.

algorithm caching cache-invalidation generalization

117
推荐指数
3
解决办法
4万
查看次数

EventBus/PubSub vs(反应式扩展)RX关于单线程应用程序中的代码清晰度

目前,我正在使用带有Scala(和JavaFX)的EventBus/PubSub架构/模式来实现一个简单的笔记组织应用程序(有点像Evernote客户端,带有一些添加的思维导图功能),我不得不说我真的很喜欢EventBus观察者模式.

以下是一些EventBus库:

https://code.google.com/p/guava-libraries/wiki/EventBusExplained

http://eventbus.org(目前似乎已经失效)这是我在实施中使用的那个.

http://greenrobot.github.io/EventBus/

以下是EventBus库的比较:http://codeblock.engio.net/37/

EventBus与发布 - 订阅模式相关.

但是!

最近,我参加了CourseraReactive课程并开始怀疑使用RXJava而不是EventBus是否会在单线程应用程序中简化事件处理代码?

我想问一下关于使用这两种技术(某种eventbus库谁编程的人的经验某种形式的反应扩展(RX)):是很容易解决的事件处理使用RX复杂性比与事件总线架构给出没有必要使用多个线程

我问这个,因为我已经在听到无功讲座CourseraRX(即没有"回调地狱")导致更清洁的代码比使用观察者模式,但是我没有找到VS EventBus架构之间的任何比较RXJava.所以很明显,EventBus和RXJava都比观察者模式更好,但 在代码清晰度和可维护性方面,它在单线程应用程序更好

如果我理解正确的话,RXJava的主要卖点是,如果存在阻塞操作(例如,等待来自服务器的响应),它可用于生成响应式应用程序.

但我根本不关心异步性,我所关心的只是在单线程应用程序中保持代码清洁,解开并易于推理.

在这种情况下,使用RXJava比使用EventBus更好吗?

我认为EventBus将是一个更简单,更清晰的解决方案,我认为没有任何理由可以将RXJava用于单线程应用程序,而采用简单的EventBus架构.

但我可能错了!

如果我错了,请纠正我,并解释为什么RXJava在单线程应用程序中没有执行阻塞操作的情况下比简单的EventBus更好.

event-handling reactive-programming system.reactive event-bus rx-java

37
推荐指数
2
解决办法
1万
查看次数

如何避免Rx中的毛刺

与其他"FRP"库不同,Rx不会阻止毛刺:使用时间不匹配的数据调用回调.有办法解决这个问题吗?

作为一个例子,假设我们有一系列昂贵的计算从单个流派生(例如,而不是_.identity,下面,我们做一个排序,或ajax提取).我们做了明确的改变,以避免重新计算昂贵的东西.

sub = new Rx.Subject();
a = sub.distinctUntilChanged().share();
b = a.select(_.identity).distinctUntilChanged().share();
c = b.select(_.identity).distinctUntilChanged();
d = Rx.Observable.combineLatest(a, b, c, function () { return _.toArray(arguments); });
d.subscribe(console.log.bind(console));
sub.onNext('a');
sub.onNext('b');
Run Code Online (Sandbox Code Playgroud)

第二个事件最终将导致一些错误的状态:我们得到三个事件,而不是一个,这浪费了一堆cpu并要求我们明确解决不匹配的数据.

这个特定的例子可以通过删除distinctUntilChanged来解决,如果输入没有改变,可以编写一些不稳定的scan()函数来传递前一个结果.然后你可以压缩结果,而不是使用combineLatest.它很笨拙但可行.

但是,如果在任何地方存在异步,例如ajax调用,则zip不起作用:ajax调用将同步(如果已缓存)或异步完成,因此您无法使用zip.

编辑

尝试使用更简单的示例来阐明所需的行为:

你有两个流,a和b.b取决于a.b是异步的,但是浏览器可以缓存它,因此它可以独立地更新,也可以同时更新.因此,浏览器中的特定事件可能会导致以下三种情况之一:更新; b更新; a和b都更新.期望的行为是在所有三种情况下仅调用一次回调(例如渲染方法).

zip不起作用,因为当a或b单独触发时,我们不会收到来自zip的回调.combineLatest不起作用,因为当a和b一起发射时,我们得到两个回调.

javascript reactive-programming reactive-extensions-js rxjs

7
推荐指数
1
解决办法
1606
查看次数

是否有可能将Mario示例从Elm转换为纯JavaFX或JavaFX + RxJava,同时保留Elm的高级抽象?

我最近看到了关于Elm反应式编程的这个有趣的演讲.

这让我想知道用于实现Mario游戏的语言结构(在所示的演示文稿中,以及下图中)是否可以映射到纯JavaFX或JavaFX与RxJava结合的类似高级语言结构?

换句话说,是否有可能在单独的JavaFX或JavaFX + RxJava中使用相同的概念抽象(即时间相关值)来表达在Elm中实现的Mario游戏?

因此,如果经验丰富的JavaFX程序员或经验丰富的JavaFX + RxJava + Functional程序员想要将Mario游戏从Elm移植到1)JavaFX或2)JavaFX + RxJava那么程序员可以通过使用类似的高来完成此任务在Elm中使用的级别抽象

我为JavaFX考虑的抽象是绑定,对于JavaFX + RxJava是绑定+ Observables/Subjects/Subscription.

在此输入图像描述

javafx reactive-programming system.reactive elm rx-java

5
推荐指数
1
解决办法
1462
查看次数

TakeUntil 不能按文档工作?

来自操作员的文档TakeUntil(强调我的):

TakeUntil 订阅并开始镜像源 Observable。它还监视您提供的第二个 Observable。如果第二个 Observable 发出一个项目或发送终止通知,则 TakeUntil 返回的 Observable 停止镜像源 Observable并终止

如果这是真的,那么为什么会阻止?:

Observable.Never<Unit>()
    .TakeUntil(Observable.Empty<Unit>())
    .Wait();
Run Code Online (Sandbox Code Playgroud)

.net c# system.reactive

5
推荐指数
1
解决办法
774
查看次数