Thanks for your answer! Does the OS typically schedule the threads evenly, or does it leave much to be desired?
The reason for my question is that I have some very CPU-intensive kontakt instruments. I am considering running each instrument in a separate VE instance to try and "force" the OS to schedule each to a different CPU core.
Most of the time, the OS is really very good at scheduling threads. As long as you (as a developer) try to keep a sane threading model in your application - you can usually trust the OS to do the proper scheduling, as long as you have thread priorities set correctly. There are of course times when thread context switching can cause performance losses, but to my experience - the OS scheduler is remarkably good and quick. I suppose you are using Kontakt in a sequencer host today, I would recommend to have the sequencer handling any threading or affinity.
When it comes to threading in audio applications, and mixers in aprticular - there are several things to consider. At one or several points the threads need to be syncronized, for submixing, bussing, sends etc, and this can create some issues if it is not done properly. I know some people, running multiple audio input objects in Logic, are having quite some issues with most of processing plugins ending up on the same mixer thread, overloading even an 8-core machine with only a few plugins.