Какова цель Потока. Метод SpinWait?

Попробуйте эту команду:

del /s foldername
60
задан Drake 7 July 2009 в 08:56
поделиться

4 ответа

нет. Он используется в качестве замены очень кратковременных звонков во сне.

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

Однако иногда вы ждете совсем немного времени. В этих случаях вы, как правило, все равно отказываетесь от оставшегося времени и ждете, пока все другие потоки сделают свое дело, прежде чем приступать к следующему шагу ... так что вы можете обмануть, вместо того, чтобы ждать, вы сидите и непрерывно опрашиваете в 'мы почти там еще? путь. Если блокировка удерживается только часть вашего оставшегося времени, это становится очень эффективным средством ожидания, а также очень эффективным, поскольку планировщику не нужно вмешиваться в перестановку всех других потоков, чтобы использовать время, от которого вы отказываетесь если бы вы ждали нормально.

Очевидно, если вы будете вращать каждый раз, когда вам нужен замок, вы ' не будет очень популярным, ваше приложение станет вялым и будет использовать 100% ЦП, но в очень малых дозах и в нужное время оно сделает приложение более отзывчивым.

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

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

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

106
ответ дан 24 November 2019 в 17:29
поделиться

Кстати, Microsoft избавилась от механизма спин-блокировки диспетчера потоков из Windows 7, поскольку он плохо масштабируется для многоядерных процессоров. Взгляните на это :

15
ответ дан 24 November 2019 в 17:29
поделиться

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

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

6
ответ дан 24 November 2019 в 17:29
поделиться

Цель состоит в том, чтобы выполнить "дешевое" ожидание, если вы считаете, что условие, которого вы ждете, сбудется очень, очень скоро . Обычно, если вы чего-то ждете, вы позволяете потоку перейти в спящий режим, и процессор / ОС переключает контекст на другой поток. Переключение контекста не особенно дешево, поэтому, если вы хорошо разбираетесь в ситуации и считаете, что дешевле ждать, чем переключать контекст, вы просто ждете.

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

77
ответ дан 24 November 2019 в 17:29
поделиться
Другие вопросы по тегам:

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