Как часто управляемое распараллеливает, переключают потоки ОС?

Я понимаю, что управляемые потоки, как гарантируют, не будут работать на том же потоке ОС.

Если CLR может переключить управляемый поток между потоками ОС, как часто это происходит? Что влияет на частоту?

У меня есть отдельный вопрос о том, как мешать переключению произойти. Второй приз за меня был бы, чтобы это не происходило слишком часто (меньше, чем, после того как минута была бы прекрасна).

5
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Это полностью зависит от хоста. Нет никакой гарантии, когда и где может произойти переключение потоков (если таковое вообще произойдет), учитывая конкретный хост.

Однако, начиная с .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

7
ответ дан 13 December 2019 в 19:28
поделиться

Насколько мне известно, текущая реализация CLR maps managed потоков к потокам операционной системы. Однако, как сказано в документации, это не гарантируется, т.е. является реализацией, так что вы ничего не можете предположить. Это может измениться, но даже если это не соответствует совету документации, вы не должны полагаться на сопоставление один к одному.

Как указывает CasperOne, вы можете установить сродство потоков, но кроме этого, нет никаких гарантий.

4
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: