说出该技术的名称(可能称为“搭载”)
以下方法/技术的名称是什么(我将尽力描述,可能需要“记忆”背景才能理解为什么该技术非常有用)
:一些可能很长的异步计算,并且您意识到相同的计算已经开始,但尚未完成,并且您“搭载”了第一个计算。然后,当第一次计算结束时,它发出的不是一个而是两个回调。
目标是不要不必要地启动第二次计算,因为您知道已经有一个相同的计算正在运行。
请注意,尽管并非完全不同,但我并不是在寻找缓存的特殊情况,“记忆化”是:记忆化是当您开始计算并找到已经完成的相同计算的缓存(记忆化)结果时 您可以重复使用。
在这里,我正在寻找与记忆化有点相似的技术名称(因为它可以出于某些与记忆化是有用技术相同的原因而有用),只不过它重用了第一个计算即使在您发出第二个计算时第一个计算尚未完成。
我一直将这种技术称为“搭载”,但我不知道这是否正确。
实际上,我不止一次地使用过它作为某种“类固醇记忆”,而且它非常方便。
我只是不知道这种(高级?)技术的名称是什么。
编辑
该死,我想对 epatel 的答案发表评论,但它消失了。 epatel 的回答给了我一个想法,这种技术可以称为“惰性记忆”:)
What is the name of the following method/technique (I'll try to describe the best I could, background on "memoization" is probably needed to understand why this technique can be very useful):
You start some potentially lenghty asynchronous computation and you realize that an identical computation has already been started but is not done yet and you "piggyback" on the first computation. Then when the first computation ends, it issues not one but two callbacks.
The goal is to not needlessly start a second computation because you know that there's already an identical computation running.
Note that altough not entirely dissimilar, I'm not looking for the particular case of caching that "memoization" is: memoization is when you start a computation and find a cached (memoized) result of that same computation that is already done that you can reuse.
Here I'm looking for the name of the technique that is in a way a bit similar to memoization (in that it is can be useful for some of the same reasons that memoization is a useful technique), except that it reuses the result of the first computation even if the first computation is not done yet at the time you issue the second computation.
I've always called that technique "piggybacking" but I don't know if this is correct.
I've actually used this more than once as some kind of "memoization on steroids" and it came very handy.
I just don't know what the name of this (advanced ?) technique is.
EDIT
Damn, I wanted to comment on epatel's answer but it disappeared. epatel's answer gave me an idea, this technique could be called "lazy memoization" :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这只是期货的记忆。
正常的“热切”记忆是这样工作的:
现在,如果 f(x) 返回 futures 而不是实际结果,则上面的代码按原样工作。你会得到捎带效应,即像这样:
This is just memoization of futures.
Normal "eager" memoization works like this:
Now if f(x) returns futures instead of actual results, the above code works as is. You get the piggyback effect, i.e. like this:
听起来像是未来:http://en.wikipedia.org/wiki/Future_%28programming %29
Sounds like a future: http://en.wikipedia.org/wiki/Future_%28programming%29
在某些情况下,我听说过这称为“请求合并”。
In some contexts, I've heard this called "Request Merging".
听起来有点像延迟评估,但不完全是......
Sounds a little like Lazy Evaluation, but not exactly...