Hi All. While familiarizing myself with different ways of making my models concurrent, I ran into something that might be a bug.
given this code, and a 4core machine: (defn fib [n] (if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2))))) (defn pow "from the tiny math library" [x# y#] (. java.lang.Math (pow #^java.lang.Double x# #^java.lang.Double y#))) (dotimes [t 7] (time (let [agents (for [i (range (pow 10 t))] (agent 15))] (do (println (pow 10 t) "fib 15 agents send-off") (doseq [a agents] (send-off a fib)) (apply await agents))))) I get this output: 1.0 fib 15 agents send-off "Elapsed time: 1.120026 msecs" 10.0 fib 15 agents send-off "Elapsed time: 1.853112 msecs" 100.0 fib 15 agents send-off "Elapsed time: 13.192213 msecs" 1000.0 fib 15 agents send-off "Elapsed time: 106.954241 msecs" 10000.0 fib 15 agents send-off "Elapsed time: 1117.189967 msecs" 100000.0 fib 15 agents send-off "Elapsed time: 11377.972402 msecs" 1000000.0 fib 15 agents send-off java.lang.OutOfMemoryError: Java heap space (NO_SOURCE_FILE:0) [Thrown class clojure.lang.Compiler$CompilerException] Restarts: 0: [ABORT] Return to SLIME's top level. 1: [CAUSE] Throw cause of this exception Backtrace: 0: clojure.lang.Compiler.eval(Compiler.java:4127) 1: clojure.core$eval__3503.invoke(core.clj:1463) 2: swank.commands.basic$eval_region__557.invoke(basic.clj:35) 3: swank.commands.basic$interactive_eval__563.invoke(basic.clj:44) 4: clojure.lang.Var.invoke(Var.java:327) 5: user$eval__1383.invoke(Unknown Source) 6: clojure.lang.Compiler.eval(Compiler.java:4116) 7: clojure.core$eval__3503.invoke(core.clj:1463) 8: swank.core$eval_in_emacs_package__266.invoke(core.clj:53) 9: swank.core$eval_for_emacs__339.invoke(core.clj:120) 10: clojure.lang.Var.invoke(Var.java:335) 11: clojure.lang.AFn.applyToHelper(AFn.java:199) 12: clojure.lang.Var.applyTo(Var.java:444) 13: clojure.core$apply__2841.doInvoke(core.clj:374) 14: clojure.lang.RestFn.invoke(RestFn.java:428) 15: swank.core$eval_from_control__269.invoke(core.clj:60) 16: swank.core$spawn_worker_thread__342$fn__370$fn__372.invoke (core.clj:144) 17: clojure.lang.AFn.applyToHelper(AFn.java:191) 18: clojure.lang.AFn.applyTo(AFn.java:184) 19: clojure.core$apply__2841.doInvoke(core.clj:374) 20: clojure.lang.RestFn.invoke(RestFn.java:428) 21: swank.core$spawn_worker_thread__342$fn__370.doInvoke(core.clj: 142) 22: clojure.lang.RestFn.invoke(RestFn.java:402) 23: clojure.lang.AFn.run(AFn.java:38) 24: java.lang.Thread.run(Unknown Source) (something goes wrong when sending off a million agents, and for a while I am only using 1 of the four CPU's.) (using send or send-off doesn't seem to make a difference here, performance or crash-wise) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---