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.

Reply via email to