SwitchToThread/Thread. Урожай по сравнению с Потоком. Сон (0) по сравнению с Thead. Сон (1)

Другой способ перечислить функции состоит в том, чтобы использовать представления INFORMATION_SCHEMA.

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'

Согласно представлениям информационной схемы "Веб-сайта Microsoft обеспечивают внутреннее, независимое от системной таблицы представление метаданных SQL Server. Представления информационной схемы позволяют приложениям работать правильно, хотя существенные изменения были внесены в базовые системные таблицы". Другими словами, базовые Системные таблицы могут измениться, поскольку SQL обновлен, но представления должны все еще остаться тем же.

38
задан 11 September 2009 в 22:50
поделиться

2 ответа

SpinWait полезен на процессорах с гиперпоточностью. Благодаря гиперпоточности несколько запланированных потоков ОС могут выполняться на одном физическом процессоре, разделяя ресурсы процессора. SpinWait указывает процессору, что вы не выполняете никакой полезной работы и что он должен запускать код с другого логического процессора. Как следует из названия, он обычно используется, когда вы вращаетесь.

Предположим, у вас есть такой код:

while (!foo) {} // Spin until foo is set.

Если этот поток выполняется в потоке на гиперпоточном процессоре, он потребляет ресурсы процессора, которые могут использоваться для других потоки, работающие на процессоре.

Изменяя на:

while (!foo) {Thread.SpinWait(1);} 

Мы указываем процессору, чтобы он предоставил некоторые ресурсы другому потоку.

SpinWait не влияет на планирование потоков ОС.

Что касается ваших основных вопросов о «Максимальной доходности», это в значительной степени зависит от вашей ситуации - вы не сможете получить хороший ответ, не пояснив, почему вы хотите, чтобы поток уступал. С моей точки зрения, лучший способ заставить процессор переходить в состояние ожидания и просыпаться только тогда, когда есть работа. Все остальное - просто трата времени процессора.

12
ответ дан 27 November 2019 в 03:56
поделиться

SpinWait рассчитан на ожидание без предоставления текущего кванта времени

Он разработан для ситуаций, когда вы знаете, что хотите что-то сделать в очень короткое время, поэтому теряете квоту времени будет чрезмерным.

У меня сложилось впечатление Thread.Yield (x) для любого значения x <квант потока был эквивалентным, включая ноль, хотя у меня нет тестов на этот счет.

4
ответ дан 27 November 2019 в 03:56
поделиться
Другие вопросы по тегам:

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