Подтвердить что ты не робот

ManualResetEventSlim рекомендуемое время ожидания

Документация MSDN для ManualResetEventSlim указывает

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

Как долго "очень короткий"? В какой момент преимущество использования объекта ядра с ManualResetEvent перевешивает накладные расходы на его создание?

4b9b3361

Ответ 1

Это то, что я нашел и хотел бы, чтобы кто-то еще подтвердил это, но это то, что я нашел при чтении Reference Source для ManualResetEventSlim

ManualResetEventSlim
Он пытается просто спать и уступать по количеству процессоров и делать крайне короткие спячки - 1 мс или 0 мс в зависимости от его текущего индекса спина. Если до сих пор не хватило времени, оно вернется к использованию Monitor.Wait с использованием новой обновленной версии таймаута, которая была первоначально передана.

Передача в 0 для Thread.Sleep уменьшает время.

ManualResetEvent
Он использует WaitHandle и вызывает собственные методы для обработки ожидающего указанного времени. К сожалению, я не вижу, что он делает.

Мой вывод
" Очень короткий" означает всего несколько миллисекунд.

EDIT: Я только что нашел те, у которых много информации:

Ответ 2

Шкала от кэша CPU к ОЗУ и к ядру приблизительно логарифмическая. Скажем, вы можете делать 400 циклов с использованием кеша ЦП или 20 циклов ЦП, используя чтение/запись ОЗУ или 1 операцию ядра. Числа будут зависеть от аппаратного обеспечения, это просто оценка.

Если вы считаете, что максимальное время ожидания будет меньше 6-15 нс (~ 20-50 циклов процессора @3GHz), чем небольшое время ожидания.