On Monday, March 26, 2018 at 4:09:24 PM UTC-4, Marvin Renich wrote:
> It seems that you understand why you are seeing the behavior you
> reported, but you are questioning whether the spec either does or should
> guarantee that reading from a channel with a goroutine waiting to send
> on that channel will fill the buffer as an atomic part of the read.
> As others have said, the spec does not guarantee this. I would like to
> add that I believe it shouldn't. Suppose goroutine A is currently
> blocked waiting to send on a channel. Now goroutine B reads from that
> channel. If the refill of the channel must happen atomically with the
> read from that channel, now goroutine B must be put in a blocked state
> waiting for goroutine A to finish its send. This contradicts the spec
> at  which states
> ...communication succeeds without blocking if the buffer is not full
> (sends) or not empty (receives).
> If you think about how this is likely to be implemented (including
> considerations for GOMAXPROC and multicore vs single core systems), you
> should realize that, while it would be possible to implement
> atomic-refill, it would give no (or very little) benefit and might have
> undesirable performance effects.
> As an aside, I think the reason Jake is seeing 100 lines of output and
> you only see 1 is likely to be the difference between GOMAXPROC=1 and
> greater than 1. If GOMAXPROC=1, the scheduler may force a running
> goroutine to yield after receiving, but before returning from the
> receive operation. In other words, the receive happens without
> blocking, but the scheduler thinks that is a convenient point for giving
> another goroutine an opportunity to run.
No, I tried both GOMAXPROC=1 and GOMAXPROC=4. Same results.
It is strange that I just tried it again, now there will be always 100
for both GOMAXPROC=1 and GOMAXPROC=4, for both v1.10 and v1.10.1.
>  https://golang.org/ref/spec#Channel_types
You received this message because you are subscribed to the Google Groups
To unsubscribe from this group and stop receiving emails from it, send an email
For more options, visit https://groups.google.com/d/optout.