&quot;One worker per core&quot; is too simplistic.  Yes, as I wrote in a pretty well-known article a dozen years ago, it&#x27;s a good starting point.  Yes, it can avoid some context switching.  On the other hand, when you have to account for threads doing background stuff it can be too many, leaving you with context thrashing between oversubscribed cores.  When you account for threads blocking for reasons beyond your control (e.g. in libraries or due to page faults) it might be too <i>few</i>.  The right number of worker threads is usually somewhere around the number of cores, but depends on your exact situation and can even vary over time.<p>Those who do not know the lessons of history...