I have another code snippet which hits the same problem and it does not use sleep: https://play.golang.org/p/mUPCOFle4h All 10 goroutines are going beyond "runtime.LockOSThread()" on a single OS thread.
Output: > main > locked 1 > locked 10 > locked 9 > locked 8 > locked 7 > locked 6 > locked 5 > locked 4 > locked 3 > locked 2 > done 1 > done 6 > done 4 > done 8 > done 7 > done 2 > done 9 > done 5 > done 3 > done 10 Thank you very much for looking into this. On Monday, October 3, 2016 at 12:15:18 PM UTC-7, Ian Lance Taylor wrote: > > On Mon, Oct 3, 2016 at 12:10 PM, 'SrimanthG' via golang-nuts > <[email protected] <javascript:>> wrote: > > If you run the code snippet I pasted in > https://play.golang.org/p/4R-WlCiKNT > > you will see that it runs both in parallel - hence my confusion > > Sleeping in time.Sleep does not count as running. > > If you mean something else, can you be more specific? My apologies if > I'm missing something. > > Ian > > > On Monday, October 3, 2016 at 12:04:39 PM UTC-7, Ian Lance Taylor wrote: > >> > >> On Mon, Oct 3, 2016 at 11:31 AM, 'SrimanthG' via golang-nuts > >> <[email protected]> wrote: > >> > > >> > I ran a Go program with GOMAXPROCS=1 and two goroutines which both > did > >> > "runtime.LockOSThread()" and slept 10 seconds before exiting. > >> > > >> > Code: https://play.golang.org/p/4R-WlCiKNT > >> > > >> > Since I had 1 OS thread and 2 goroutines trying to lock an OS thread, > I > >> > was > >> > expecting only one of them to complete first before the other one > >> > started... > >> > because the documentation said "Until the calling goroutine exits or > >> > calls > >> > UnlockOSThread, it will always execute in that thread, and no other > >> > goroutine can." > >> > > >> > However the output shows that both goroutines execute in parallel, > >> > contradicting LockOSThread documentation. > >> > Can someone explain if the documentation is wrong, if its a bug, or a > >> > better > >> > way to understand how these constructs work? > >> > >> GOMAXPROCS set a limit on the number of goroutines that may run in > >> parallel. It does not set any sort of limit on the number of threads > >> that may exist. You have two threads, which is fine. All that > >> setting GOMAXPROCS=1 does is request the scheduler to only run one of > >> those threads at a time. > >> > >> Ian > > > > -- > > 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 [email protected] <javascript:>. > > 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
