When I read through the GHC Wiki commentary on the scheduler I was confused about this section:
One reason behind marking a Capability as free when it is handed over is to support fast callouts. When making a safe foreign call we have to release the Capability, and therefore hand it over to another worker thread. If the foreign call is short, we don't want to incur the cost of a context switch on returning, but since we marked the Capability as free there's a good chance the returning Task will be able to re-acquire it immediately and continue. The worker that we woke up will find that the Capability is owned, and go back to sleep again (this may incur a double context switch if there are no free CPUs on which to run the worker, however).
My question:
For the bold sentence, what indeed will lead to the "Double context switch", with or without marking a capability as free. Furthermore, what are the two "switches" if they happen -- from who1 to who2, then who2 to who3?
Partially answered here: http://www.haskell.org/pipermail/cvs-ghc/2011-May/062287.html (a copy: http://markmail.org/message/2q6fjthw2wvof244?q=switch+list:org.haskell.cvs-ghc&page=2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With