Now I got it - thanks for the explanation.

Am Mi., 19. Dez. 2018 um 02:25 Uhr schrieb <mhhc...@gmail.com>:

> > feel unbuffered channels are safer to use especially in an acyclic
> directed graph of flowing values. Buffered channels seem to reduce blocking
> but I feel they come with the cost of such side effects like my initial
> problem of forgotten results in their channels.
>
>
> that happens with unbuffered channel too, if, for example, you mix it with
> a select on context cancellation.
> Maybe you are lucky and your data source provides a acknowledgment
> mechanism, maybe you are not and it s up to you to work around.
> This becomes a problem when the code can t be rationalized via an api that
> is able to wrap those behaviors.
>
> On Tuesday, December 18, 2018 at 8:50:20 PM UTC+1, Chris Burkert wrote:
>>
>> Robert,
>> it seems to me that you have a clear understanding about unbuffered vs.
>> buffered channels. I feel unbuffered channels are safer to use especially
>> in an acyclic directed graph of flowing values. Buffered channels seem to
>> reduce blocking but I feel they come with the cost of such side effects
>> like my initial problem of forgotten results in their channels. I would
>> love to hear/read/see more on the unbuffered vs. buffered tradeoff to get
>> rid of this gut feeling I am currently based on :-). Any good article you
>> can point me to?
>> Thanks
>>
>> Robert Engels <ren...@ix.netcom.com> schrieb am Di. 18. Dez. 2018 um
>> 17:03:
>>
>>> That code is incorrect as well when using buffered channels.
>>>
>>> On Dec 18, 2018, at 10:00 AM, Skip Tavakkolian <skip.tav...@gmail.com>
>>> wrote:
>>>
>>> why not just  drop the select? i think the following is guaranteed
>>> because putting things on rc has to succeed before putting true into dc:
>>>
>>> package main
>>>
>>> import (
>>> "fmt"
>>> )
>>>
>>> func do(i int, rc chan<- int, dc chan<- bool) {
>>> rc <- i
>>> dc <- true
>>> }
>>>
>>> func main() {
>>> worker := 10
>>> rc := make(chan int, worker)
>>> done := 0
>>> dc := make(chan bool, worker)
>>> for i := 0; i < worker; i++ {
>>> go do(i, rc, dc)
>>> }
>>> for done < worker {
>>> r := <-rc
>>> fmt.Println(r)
>>> <-dc
>>> done++
>>> }
>>> }
>>>
>>>
>>> On Tue, Dec 18, 2018 at 5:35 AM Chris Burkert <burker...@gmail.com>
>>> wrote:
>>>
>>>> Dear all,
>>>>
>>>> I have a couple of goroutines sending multiple results over a channel -
>>>> a simple fan-in. They signal the completion on a done channel. Main selects
>>>> on the results and done channel in parallel. As the select is random main
>>>> sometimes misses to select the last result. What would be the idiomatic way
>>>> to prevent this and completely drain the result channel?
>>>>
>>>> Here is a minmal example which sometimes prints one 0 but should always
>>>> print two of them:
>>>>
>>>> package main
>>>>
>>>> import (
>>>>         "fmt"
>>>> )
>>>>
>>>> func do(rc chan<- int, dc chan<- bool) {
>>>>         rc <- 0
>>>>         dc <- true
>>>> }
>>>>
>>>> func main() {
>>>>         worker := 2
>>>>         rc := make(chan int, worker)
>>>>         done := 0
>>>>         dc := make(chan bool, worker)
>>>>         for i := 0; i < worker; i++ {
>>>>                 go do(rc, dc)
>>>>         }
>>>>         for done < worker {
>>>>                 select {
>>>>                 case <-dc:
>>>>                         done++
>>>>                 case r := <-rc:
>>>>                         fmt.Println(r)
>>>>                 }
>>>>         }
>>>> }
>>>>
>>>> many thanks
>>>> Chris
>>>>
>>>> --
>>>> 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...@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...@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.
> 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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to