Что является названием следующего метода/техники (я попытаюсь описать лучшее, я мог, фон на "memoization", вероятно, необходим для понимания, почему эта техника может быть очень полезной):
Вы запускаете некоторое потенциально долгое асинхронное вычисление, и Вы понимаете, что идентичное вычисление было уже запущено, но еще не сделано, и Вы "осуществляете контрейлерные перевозки" на первом вычислении. Тогда, когда первое вычисление заканчивается, оно выпускает не один но два обратных вызова.
Цель не состоит в том, чтобы напрасно запустить второе вычисление, потому что Вы знаете, что уже существует идентичное выполнение вычисления.
Обратите внимание, что, хотя не совсем отличающийся, я не ищу особый случай кэширования этого, "memoization": memoization - когда Вы запускаете вычисление и находите кэшируемый (мемоизованный) результат того же самого вычисления, которое уже сделано, что можно снова использовать.
Здесь я ищу название техники, которая в некотором роде немного подобна memoization (в котором это, может быть полезным по некоторым из тех же причин, что memoization является полезной техникой), за исключением того, что это снова использует результат первого вычисления, даже если первое вычисление еще не сделано в то время, когда Вы выпускаете второе вычисление.
Я всегда называл ту технику "осуществлением контрейлерных перевозок", но я не знаю, корректно ли это.
Я на самом деле использовал это несколько раз в качестве некоторый "memoization на стероидах", и это прибыло очень удобное.
Я просто не знаю что название этого (усовершенствованный?) техника.
Править
Чертовски, я хотел прокомментировать ответ epatel, но он исчез. ответ epatel дал мне общее представление, эту технику можно было назвать "ленивым memoization":)
В некоторых случаях я слышал, что это называется «Объединение запросов».
Это просто мемоизация фьючерсов.
Обычная "нетерпеливая" мемоизация работает следующим образом:
f_memo(x):
critical_section:
if (exists answers(f,x))
return answers(f,x)
else
a = f(x)
answers(f,x) = a
return a
Теперь, если f(x) возвращает фьючерсы вместо фактических результатов, приведенный выше код работает как есть. Вы получаете эффект piggyback, т.е. примерно так:
Звучит как будущее: http://en.wikipedia.org/wiki/Future_%28programming%29