A Spin Lock сжигает ЦП и путь опрашиваемого ресурса для непрерывной траты ресурсов, пока нужное событие не происходит.
A Операция блокировки наиболее существенно отличается тем, что не включает процессор и связанный путь к ресурсу, а также устанавливает wait
некоторой формы на ресурс, от которого ожидается желаемое событие.
В многозадачной или многопоточной / процессорной среде (обычное дело в течение длительного времени), где возможны другие операции, в то время как желаемое событие еще не наступило, сжигание ЦП и путей доступа к ресурсам приводит к ужасной трате вычислительной мощности и время.
Когда у нас есть система гиперпоточности (как я думаю, вы имеете в виду в своем вопросе), важно отметить, что степень детализации, с которой разделены потоки ЦП, очень высока. Я бы высунул свою шею, чтобы также заметить, что все события, на которые вы склонны блокировать, потребуют достаточного времени, чтобы компенсировать небольшой промежуток времени, за который им пришлось ждать еще до разблокировки.
Я думаю, что J-16
указывает на то, что спящий (заблокированный) поток оставляет свой код и пространство данных неиспользованным в заблокированном состоянии. Это может привести к тому, что система освободит ресурсы (например, кэши данных / кода), которые затем необходимо будет пополнить при освобождении блока. Следовательно, в зависимости от условий, блок может привести к большему расходу ресурсов.
Это также действительное примечание, и его следует проверить при разработке и реализации.
Но в большинстве случаев блокировка обычно лучше, чем спин-блокировки.