M
Morsing's Blog
morsmachine.dk · Personal blog · on HN since 2013
A Go developer's blog on the Go scheduler and netpoller, causal profiling, TCP and consensus, and Kubernetes.
What HN saysCommenters repeatedly cite its Go scheduler post as the best overview of goroutine scheduling.
17HN people shared it
4linked it in comments
15stories submitted
432story points
2 years agolast shared
2013people per year2026
Most-shared posts
- 1The Go 1.1 scheduler10 people · 156 points · first shared 2013 · 28 comments on HN
- 2The Go netpoller (2013)3 people · 50 points · first shared 2013 · 1 comments on HN
- 3TCP is an underspecified two-node consensus algorithm2 people · 139 points · first shared 2018 · 45 comments on HN
- 4Causal Profiling for Go1 people · 84 points · first shared 2016 · discussion on HN
- 5Let's assess Kubernetes1 people · 2 points · first shared 2017 · discussion on HN
- 6A Causal Profiling update1 people · 1 points · first shared 2017 · discussion on HN
What HN people wrote when they linked it
jstewartmobile · 2017-10-03
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
tuxychandru · 2015-01-12
This is a good read on the Go scheduler. http://morsmachine.dk/go-scheduler
zbobet2012 · 2017-08-15
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.
soulbadguy · 2016-08-12
> 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.