* K sparks scheduled over * M lightweight threads scheduled onto * N OS threads over * C hardware cores.
The runtime manages this, and does load balancing.
I'm pretty sure they use a M:N language-thread to OS-thread system. So they need to decide what thread to put "on" an OS-thread at any given time.