News for hackers. Stuff that matters.
Re:Re: 100k Threads? (2002) by messe on Saturday September 23, 2023 @08:36AM (#37622719)
> - The VM JITs, but inserts a preamble before every function call saying “Before executing this function, should I switch to another green thread first?”, and thus, so long as you call functions frequently enough, you “preempt” yourself. This is how Go does it, and it’s a well known thing in Go that if you never call a function for a while (like just doing a really huge for loop), the current goroutine doesn’t yield execution and hogs the whole OS thread.

I'm not sure of the implementation details, but this hasn't been true for a while in Go. As of Go 1.14, goroutines are asynchronously preemptible, so loops without function calls no longer deadlock the scheduler or GC: https://go.dev/doc/go1.14#runtime

Re:Re: 100k Threads? (2002) by semiquaver on Saturday September 23, 2023 @09:16AM (#37622964)
The docs there hint at how it’s likely done in go: the runtime uses a signal handler to preempt code that hasn’t yielded the scheduler recently enough.
Re:Re: 100k Threads? (2002) by ninkendo on Saturday September 23, 2023 @05:46PM (#37627841)
Interesting! My info is way out of date then. Thanks for the link.