I propose that Go implement non-cooperative goroutine preemption by sending a POSIX signal (or using an equivalent OS mechanism) to stop a running goroutine and capture its CPU state. If a goroutine is interrupted at a point that must be GC atomic, as detailed in the "Handling unsafe-points" section, the runtime can simply resume the goroutine and try again later.
Хм, в Шарпах давно таки таски реагируют на прерывания от сетевой Карты. А что, в Go недавно такое завезли? БТВ, таки а чем тебе мешает возможность написания своего шедулера? В C# можно для тасков (есть классы Thread системные потоки и Task n:m concurrency) и я даже пару клевых трюков с этим видел.