4 ms·
"native threads switching overhead is extremely low, probably lower than usermode Go thread overhead" This is most likely very wrong.
by Thaxll 6y ago
"native threads switching overhead is extremely low, probably lower than usermode Go thread overhead"
This is most likely very wrong.
- otabdeveloper4 6y agoIt isn't. Kernel context switching is the same thing as language runtime context switching, except you get access to kernel mode and you don't have to keep track of garbage collection stuff.
- jaen 6y agoWhen you think about in depth, the kernel can context switch between threads essentially for free when returning from a syscall (the work to restore a userland context is the same regardless of which context it is switching to, disregarding cache effects). In most apps, context switches would happen only due to kernel->user transitions anyway (such as an I/O syscall finishing or a timer triggering), so in most apps kernel context switches are indeed almost free. To be significantly more efficient than the kernel there should be much more context switches than syscalls, which for non-synthetic programs is mostly only possible under heavy loads that can batch, with suitable I/O interfaces such as io_uring.