понимание фьючерсов Clojure

Я пытаюсь понять фьючерсы Clojure, и я видел примеры из обычных книг по Clojure, и там есть примеры, где фьючерсы используются для параллельных вычислений (что, кажется, имеет смысл).

Тем не менее, я я надеюсь, что кто-нибудь сможет объяснить поведение простого примера, адаптированного из книги O'Reilly Programming Clojure

(def long-calculation (future (apply + (range 1e8))))

Когда я пытаюсь разыменовать это, выполнив

(time @long-calculation)

он возвращает правильный результат (4999999950000000), но почти мгновенно (через 0,045). мсек) на моей машине.

Но когда я вызываю настоящую функцию Таким образом

(time (apply + (range 1e8)))

я также получаю правильный результат, но затрачиваемое время намного больше (~ 5000 мс).

Когда я разыменовываю будущее, я понимаю, что создается новый поток, в котором вычисляется выражение, и в этом случае я ожидаю, что это также займет около 5000 мс.

Почему разыменованное будущее так быстро возвращает правильный результат?

7
задан endbegin 14 May 2012 в 18:56
поделиться