Thanks for the quick response! I found the problem.
I actually had a "pause" inside (this is the go-loop version that had the same problem as the "while true"): (a/go-loop [] (when-let [document (a/<! channel)] (println "New document to render: " (pr-str document))) (recur)) Comparing it with your's I just realized the "recur" is outside the "when-let". So after the channel is closed it returns immediately, it does not step into "when-let" but calls "recur" immediately. Putting it into the "when-let" block solved the problem. Thanks, Torsten. Am Montag, 23. Januar 2017 11:44:45 UTC+1 schrieb Max Penet: > > You do nothing for the while loop to end > > (while true > ... <do nothing>)) > > This will still eat cpu time (a lot if there's no "pause" inside, empty > chan/takes inside or not. > > That's why usually you use loop/recur with a condition of the take! > result or put! result in case of push. > > (go-loop [] > (when-let [x (<! ch)] > (do something with x) > (recur)))) > > > > On Monday, January 23, 2017 at 10:19:00 AM UTC+1, Torsten Uhlmann wrote: >> >> I'm experiencing this weird behavior in my app- when restarting the >> components of my app some have a core.async channel and a go-loop inside. >> >> When trying to close! these channels the cpu usage of my app goes way up, >> and stays up- as if the loop does some polling. >> >> I prepared a minimal example here: >> https://github.com/tuhlmann/async-close-problem >> >> The problem occurs only if the channel has a go-loop or a "while true" >> loop inside, otherwise closing the channel works fine. >> >> I experience the problem on both Windows and Unix. >> >> To reproduce: >> >> git clone https://github.com/tuhlmann/async-close-problem >> >> cd async-close-problem >> lein repl >> ;; open a top or process view in another terminal >> >> (start-chan) >> ;; confirm used cpu for the Java process is very low >> >> (stop-chan) >> ;; watch used cpu go way up >> >> >> The go block is very simple: >> >> (a/go >> (while true >> (when-let [document (a/<! channel)] >> (println "New document to render: " (pr-str document))))) >> >> "channel" is the one I close with (a/close! channel) >> >> In this example I do not send anything into the channel, just starting it >> up and closing it down. >> >> Am I doing something wrong? >> >> Thanks, >> Torsten. >> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
