This is what my solution does, except that it uses items associated with priorities instead of 2 channels. if 2 channels are really needed for some reason, it is easy to adapt the solution to this.
On Fri, May 24, 2019 at 12:12 PM Daniela Petruzalek < daniela.petruza...@gmail.com> wrote: > If I had to process messages from both high and low priority channels I > would serialise then with a min heap and create a consumer process for the > min heap. The min heap seems to be the canonical way of solving the > priority queues anyway, so I think it makes sense here. > > Basically: goroutine 1 reads both channels and insert them into the > min-heap. goroutine 2 reads from min heap and do the processing. > > > Daniela Petruzalek > Software Engineer > github.com/danicat > twitter.com/danicat83 > > > Em qui, 14 de fev de 2019 às 15:34, <kangli...@gmail.com> escreveu: > >> select { >> case highVal := <- high: >> case lowVal := <- low: >> if len(high) > 0 { >> for len(high) > 0 { >> highVal := <- high >> } >> } >> // process lowVal >> } >> >> >> >> On Tuesday, July 24, 2012 at 5:16:16 AM UTC+8, Erwin Driessens wrote: >>> >>> Hello, >>> >>> i wonder how to implement channel priorities nicely. Say there are two >>> channels, one with a higher priority than the other, and a goroutine >>> waiting for incoming data on these channels. I have read that select picks >>> a random case when multiple channels are ready. I thought of nesting >>> selects: putting the lower priority select in the default case of the >>> higher priority select, and have the default case of the inner (low >>> priority) select do nothing. This leads to a kind of busy wait loop. I >>> could call a short sleep, but that still isn't very clean. Is there a >>> better way? >>> >>> Why aren't the select cases evaluated in order? >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CA%2B%3Diygt2bxH1E8fkD5JpPV1vKrz2ns%2BD5KpbhZ_SSm2vK%3Dds3w%40mail.gmail.com > <https://groups.google.com/d/msgid/golang-nuts/CA%2B%3Diygt2bxH1E8fkD5JpPV1vKrz2ns%2BD5KpbhZ_SSm2vK%3Dds3w%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAEd86TzfnfJMWT8%3D%3Dz5yRMrk0gDZgOLpPLRUO6bdhqs_%2BLB_HQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.