Great! Thanks for verifying. On Thu, Jan 30, 2014 at 11:46 AM, Jozef Wagner <jozef.wag...@gmail.com> wrote: > Seems OK. Note that code inside go blocks is transformed into state machine > 'object' immediatelly, not waiting for hitting <!, as go is a macro. > > > On Thu, Jan 30, 2014 at 8:36 PM, t x <txrev...@gmail.com> wrote: >> >> Following up on this. Is the following correct: >> >> * async/thread creates Java threads -- these _are_ root gc objects >> >> * async/go creates go "blocks", which in reality, is just a state >> machine. go-blocks are NOT root gc objects >> >> * go-blocks do _NOT_ have stackframes -- they're just a simple, flat >> state machine created via inversion of control at <!, >!, and alt! >> locations >> >> * when a go-block blocks, it gets appended to either the put or the >> take queue of the channel it's blocking on >> >> Thus, in the following code: >> >> (let [c (async/chan) >> d (async/go (<! c))] ) >> >> what happens is the following thing: >> >> * we create a channel "c" >> * we create a go-block, who returns to a channel "d" >> * the go block hits (<! c), then gets ioc-ed into a state machine >> * this state machine is put on the "take-list" of "c" >> >> Then, the GC collects "c" and "d" -- and the go-block vanishes, since >> it's just a state machine attached to "c" >> >> >> Can you please tell me if >> >> (1) all above statements are correct or >> (2) correct the wrong ones in place? >> >> Thanks! >> >> >> On Thu, Jan 30, 2014 at 11:06 AM, t x <txrev...@gmail.com> wrote: >> >> The key thing to remember in all questions of core.async GC is that >> >> there is >> >> no global "blocked gos" queue. Instead, the blocked "gos" are attached >> >> directly to the channel. When the channel is GC'd all attached gos are >> >> GC'd >> >> as well. >> > >> > This is the source of all my mis-understanding. Thanks for explaining! >> > >> > >> >> >> >> So in this case, it's actually even simpler.....the go never blocks. >> >> What >> >> this code is doing is creating a channel to return from the go. This >> >> channel >> >> has a buffer size of 1. It then puts a channel into the channel. The go >> >> then >> >> exits and is GC'd. Once the return channel is discarded by the caller >> >> of >> >> this code, both channels are also GC'd >> >> >> >> Timothy >> >> >> >> >> >> On Thu, Jan 30, 2014 at 11:24 AM, t x <txrev...@gmail.com> wrote: >> >>> >> >>> Hi, >> >>> >> >>> Consider this block of code: >> >>> >> >>> (async/go (async/chan)) >> >>> >> >>> This creates a go-thread and a go-chan. >> >>> >> >>> The go-thread is linked from the list of blocked go-threads. >> >>> >> >>> The go-chan is linked from the go-thread. >> >>> >> >>> Thus, did we just create a go-thread and a go-chan which is NOT >> >>> gc-ed at >> >>> all? >> >>> >> >>> Thanks! >> >>> >> >>> -- >> >>> 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 >> >>> Note that posts from new members are moderated - please be patient >> >>> with >> >>> your first post. >> >>> 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 >> >>> --- >> >>> 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+unsubscr...@googlegroups.com. >> >>> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> >> >> >> >> >> >> >> -- >> >> "One of the main causes of the fall of the Roman Empire was >> >> that-lacking >> >> zero-they had no way to indicate successful termination of their C >> >> programs." >> >> (Robert Firth) >> >> >> >> -- >> >> 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 >> >> Note that posts from new members are moderated - please be patient with >> >> your >> >> first post. >> >> 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 >> >> --- >> >> 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+unsubscr...@googlegroups.com. >> >> For more options, visit https://groups.google.com/groups/opt_out. >> >> -- >> 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 >> Note that posts from new members are moderated - please be patient with >> your first post. >> 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 >> --- >> 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+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. > > > -- > 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 > Note that posts from new members are moderated - please be patient with your > first post. > 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 > --- > 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+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out.
-- 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 Note that posts from new members are moderated - please be patient with your first post. 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 --- 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+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.