--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
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 clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
(defn queue-process-uncontrolled[input output stats](async/go(loop [q clojure.lang.PersistentQueue/EMPTY](let [[val-to-q ch] (async/alts!(if-let [v (peek q)][input [output v]][input]))]
(swap! stats update-stats-as-you-see-fit q)(cond; Read a value from input.
val-to-q (recur (conj q val-to-q)); Input channel is closed. => drain queue.(identical? ch input) (doseq [v q] (async/>! output v)); Write happened.:else (recur (pop q)))))(defn queue-process-controlled[input stats](let [output (async/chan)process (queue-process-uncontrolled input output stats)](async/go(<! process)(async/close! output))output))
Whilst I am pretty new to clojure. I am not to Go. The counting of items in a channel is usually regarded as an error and a race condition causing idea.
Since channels yield nil when they are devoid of items, surely this is enough to know when the channel is empty?
Aaron
To repeat: in one case I have workers pulling from a channel of real work. For various reasons this channel might get filled rather deeply. In this case I would want to add additional workers or get a bigger machine. I was wondering if monitoring the channel for things like average depth (or 99 percentile) would give me the information I needed.
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
--- You received this message because you are subscribed to a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/zD2jl-bIFXI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+unsubscribe@googlegroups.com.
I think this is all well and good for a particular use of channel.
So perhaps I am misusing channels??To repeat: in one case I have workers pulling from a channel of real work. For various reasons this channel might get filled rather deeply. In this case I would want to add additional workers or get a bigger machine. I was wondering if monitoring the channel for things like average depth (or 99 percentile) would give me the information I needed.
I could of course "just skip the channel business, and use a java queue" is a fine proposal.
But since the producers of this work are truly asynchronous (attached to the real world) I thought it best to keep the channel methodology.
On Tue, Jan 21, 2014 at 5:11 AM, Aaron France <aaron.l...@gmail.com> wrote:
On 21/01/14 14:09, Moritz Ulrich wrote:Much appreciated for the clarification. It's the same in Go.
On Tue, Jan 21, 2014 at 9:43 AM, Aaron France <aaron.l...@gmail.com> wrote:
Since channels yield nil when they are devoid of items, surely this is enough to know when the channel is empty?That's not correct. Take-Operations block on empty channels. They
yield nil when they're closed. You could add a timeout to the take
operation to see if no item arrived in a specific time.
I can imagine this pattern (take on a possibly closed channel being useful) being useful but I'm not convinced knowing the count of channel is a safe thing to know/care about.
My $0.02, perhaps Clojure does this differently.
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- You received this message because you are subscribed to a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/zD2jl-bIFXI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.
I think this is all well and good for a particular use of channel.
So perhaps I am misusing channels??To repeat: in one case I have workers pulling from a channel of real work. For various reasons this channel might get filled rather deeply. In this case I would want to add additional workers or get a bigger machine. I was wondering if monitoring the channel for things like average depth (or 99 percentile) would give me the information I needed.
I could of course "just skip the channel business, and use a java queue" is a fine proposal.
But since the producers of this work are truly asynchronous (attached to the real world) I thought it best to keep the channel methodology.
On Tue, Jan 21, 2014 at 5:11 AM, Aaron France <aaron.l...@gmail.com> wrote:
On 21/01/14 14:09, Moritz Ulrich wrote:Much appreciated for the clarification. It's the same in Go.
On Tue, Jan 21, 2014 at 9:43 AM, Aaron France <aaron.l...@gmail.com> wrote:
Since channels yield nil when they are devoid of items, surely this is enough to know when the channel is empty?That's not correct. Take-Operations block on empty channels. They
yield nil when they're closed. You could add a timeout to the take
operation to see if no item arrived in a specific time.
I can imagine this pattern (take on a possibly closed channel being useful) being useful but I'm not convinced knowing the count of channel is a safe thing to know/care about.
My $0.02, perhaps Clojure does this differently.
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- You received this message because you are subscribed to a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/zD2jl-bIFXI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.
I think this is all well and good for a particular use of channel.
So perhaps I am misusing channels??To repeat: in one case I have workers pulling from a channel of real work. For various reasons this channel might get filled rather deeply. In this case I would want to add additional workers or get a bigger machine. I was wondering if monitoring the channel for things like average depth (or 99 percentile) would give me the information I needed.
I could of course "just skip the channel business, and use a java queue" is a fine proposal.
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 clojure+u...@googlegroups.com.