Я пытаюсь понять фьючерсы 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 мс.
Почему разыменованное будущее так быстро возвращает правильный результат?