A Go developer's blog on the Go scheduler and netpoller, causal profiling, TCP and consensus, and Kubernetes.
Commenters repeatedly cite its Go scheduler post as the best overview of goroutine scheduling.
> There are no asynchronous operations in that go model, everything is synchronous.
You are the second person saying this, and i have to admit i am really confused by this statement. From my understanding, golang does not expose an asyncio interface, but this doesn't meant that golang runtime doesnt perform io operations asynchronously. So golang expose async operation through a synchronious interface, which is what most language construct (C# async/await, F# async monad etc..) try to emulate.
From https://morsmachine.dk/go-scheduler , when a goroutine performs a blocking operation, the local scheduler the remaining goroutine are migrated to another OS thread, allowing them to continue their execution while the blocking operation completes asynchroniously.
You can move the the co-routine onto another thread. The go scheduler does this: https://morsmachine.dk/go-scheduler
There isn't really a "comparison" here. Co-routines/fibers could behave exactly like nginx does for IO or not at all. It all depends on the implementation.
Not really an apples-to-apples comparison. It would have been nice to at least mention the possibility of goroutine starvation.
Here's the best overview of goroutine scheduling I've come across so far: https://morsmachine.dk/go-scheduler
This is a good read on the Go scheduler. http://morsmachine.dk/go-scheduler