Почему отмененные фьючерсы Clojure продолжают использовать процессор?

У меня есть много примеров байт-кода Java, каждый из которых я хотел бы выполнить из Clojure. Каждая последовательность байт-кода может содержать бесконечный цикл, и в этом случае я хотел бы прекратить запускать его через пару секунд. Я рассматривал фьючерсы как способ сделать это. Поискав пару реализаций, я попробовал оба этих кода:

(deref (future (loop[a 1] (recur a)) :done!) 1000 :impatient!)

... а также код наhttps://gist.github.com/3124000

В обоих случаях цикл, по-видимому, тайм-аут соответствующим образом (а в последнем случае сообщается, что будущее было и сделано, и отменено), но я вижу, что загрузка моего процессора возрастает до 99% или около того и остается там. Я также вижу, что каждый раз, когда я запускаю этот код, мой процесс Java получает дополнительный поток.

Мне кажется, что будущее отменяется, но код все еще работает. В моей программе мне нужно будет выполнить некоторые тайм-ауты с очень коротким циклом (например, эквивалент байт-кода Java «20 PRINT GOTO 10»), и у меня нет возможности изменить код, который я запускаю ,

Любые идеи, почему я вижу это поведение; что я мог сделать, чтобы предотвратить это; или альтернативные методы для меня, чтобы понять мою цель запуска и тайм-аут такого кода?

Ответы на вопрос(3)

Ваш ответ на вопрос