Я понимаю, что управляемые потоки, как гарантируют, не будут работать на том же потоке ОС.
Если CLR может переключить управляемый поток между потоками ОС, как часто это происходит? Что влияет на частоту?
У меня есть отдельный вопрос о том, как мешать переключению произойти. Второй приз за меня был бы, чтобы это не происходило слишком часто (меньше, чем, после того как минута была бы прекрасна).
Это полностью зависит от хоста. Нет никакой гарантии, когда и где может произойти переключение потоков (если таковое вообще произойдет), учитывая конкретный хост.
Однако, начиная с .NET 2.0, можно вызвать статический метод BeginThreadAffinity, чтобы уведомить хост о том, что код, который выполняется, зависит от идентичности базового потока ОС:
http://msdn.microsoft.com/en-us/library/system.threading.thread.beginthreadaffinity(VS.80). ).aspx
Конечно, нужно обязательно вызывать метод EndThreadAffinity, когда ваш поток закончен (я не уверен, что произойдет, если вы просто позволите потоку закончиться без вызова EndThreadAffinity. Не представляю, как это повлияет, но в этом вопросе лучше быть откровенным, IMO):
http://msdn.microsoft.com/en-us/library/system.threading.thread.endthreadaffinity(VS.80).aspx
Насколько мне известно, текущая реализация CLR maps managed потоков к потокам операционной системы. Однако, как сказано в документации, это не гарантируется, т.е. является реализацией, так что вы ничего не можете предположить. Это может измениться, но даже если это не соответствует совету документации, вы не должны полагаться на сопоставление один к одному.
Как указывает CasperOne, вы можете установить сродство потоков, но кроме этого, нет никаких гарантий.