Thread.Sleep (0) против Thread.Sleep (1) против Thread.Sleep (2) - PullRequest
0 голосов
/ 14 марта 2020

Если я не ошибаюсь, Thread.Sleep(0) переадресует sh временной интервал вызывающего потока на любой другой поток с приоритетом, равным или более высоким, чем у вызывающего потока , тогда как Thread.Sleep(any number larger than zero) будет освобождать sh это к любому ожидающему потоку.

Теперь, что-то кружится в моей голове, что до C# 3 или 4 раньше Thread.Sleep(0) передавало sh только потокам с более высоким приоритетом , Thread.Sleep(1) для более высокого приоритета или того же приоритета и Thread.Sleep(2) для любого приоритета. Я прав?

1 Ответ

3 голосов
/ 14 марта 2020

Thread.Sleep(n); // Where n is milliseconds

Когда N == 0

Это говорит системе, что вы хотите утратить оставшуюся часть временного интервала потока и позволить другому ожидающему потоку (чей priority> = currentThread) run (это означает, что вы не будете уверены, когда вернете свой элемент управления).
Если нет других потоков с равным приоритетом, готовых к запуску, выполнение текущего потока не приостанавливается.

Когда N> = 1 (будь то N = 1 или N = 2)

Блокирует текущий поток на как минимум число временных интервалов (или квантов потока), которые могут возникнуть в течение n миллисекунд. Другими словами, он безоговорочно передаст sh оставшуюся часть своего временного интервала любому другому потоку.

Планировщик потоков Windows гарантирует, что каждый поток (по крайней мере, с одинаковым приоритетом) получит значительную часть времени ЦП для выполнения. Причина блокирования текущего потока по меньшей мере в указанном интервале заключается в том, что планировщику может потребоваться больше времени, чем указанный интервал, прежде чем он снова доберется до этого потока.

Ссылки: 1 , 2 , 3


Обновление

В моем стремлении найти работу Sleep в версиях до C# 3, я наткнулся на интересные статьи (до 2005 года и до) я чувствовал, что стоит обновить.

Короче говоря, я не нашел никакой разницы в отношении потоков, отказывающихся от более высокого или того же приоритета, когда n = 1 или n = 2.

Из хранилищ: 1 , 2 , 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...