> So a CPU-heavy inner loop calculating everything will fail to preempt

They fixed that in Go a while ago.

https://go.dev/doc/go1.14#runtime