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

Вид: 14970|Ответ: 3

[Источник] [Настоящий бой]. NET/C# использует SemaphoreSlim для ограничения методов одновременного выполнения

[Скопировать ссылку]
Опубликовано 19.02.2022 21:23:20 | | | |
Требования: Из-за ограниченных ресурсов аппаратного обеспечения программа должна потреблять определённое количество аппаратных ресурсов в случае высокой параллелности, если некоторые методы, потребляющие слишком много ресурсов программы, не ограничены (экспорт большого объёма данных в таблицу Excel), это может повлиять на неспособность всей программы предоставлять нормальные сервисы, а также на нормальную работу операционной системы.

Разница семафора и семафора Slim

SemaphoreSlim и Semaphore похожи по функционалу. SemaphoreSlim примерно в 4 раза быстрее Semaphore, но SemaphoreSlim не может использоваться для межпроцессной сигнализации.

Причина повышения производительности заключается в том, что класс SemaphoreSlim предоставляет лёгкую альтернативу классу семафоров, который не использует семафор ядра Windows. По сути, если вам не нужно называть семафоры, используйте класс SemaphoreSlim.

SemaphoreSlim основан на SpinWait и Monitor, поэтому поток, ожидающий блокировки, занимает определённый цикл процессора, надеясь получить блокировку перед тем, как уступить место другому потоку. Если этого не происходит, поток позволяет системе переключиться в контекст и попробовать снова, когда ОС снова запланирует этот поток (за счёт использования нескольких циклов процессора). Если ожидание долгое, этот режим может потреблять много циклов процессора. Лучший вариант для такой реализации — чаще всего нет времени ожидания, и блокировка можно получить почти сразу.
Semaphore опирается на реализации в ядре ОС, поэтому при каждом получении блокировки требуется довольно много циклов процессора, но после этого поток просто уходит в спячку, чтобы получить время, необходимое для получения блокировки.

Документация по семафорам:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
Документация SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Перед выполнением метода наиболее часто используемые методы ожидания следующимиЗвоните в соответствии с реальной ситуацией вашего бизнеса

Wait(): Блокирует поток, пока он не войдёт в SemaphoreSlim.
Подожди(0): Метод не будет заблокирован. Он проверит состояние ручки ожидания и сразу же вернётся.
Ожидание: блокирует текущий поток, пока он не сможет войти в SemaphoreSlim, при этом указывает тайм-аут с помощью 32-битного знакового целого числа.

Исходный код следующий:

Визуализации следующие:







Предыдущий:Файлы Linux Secretless Login (ssh) или Secretless Copy (scp) на другие серверы
Следующий:Linux использует lookbusy для моделирования использования процессора
Опубликовано 19.02.2022 23:16:57 |
Научись учиться...
Опубликовано 20.02.2022 22:19:24 |
тест
 Хозяин| Опубликовано 18.12.2024 20:40:10 |
Разница между ManualResetEvent и AutoResetEvent, изученная в потоках C#
https://www.itsvse.com/thread-4810-1-1.html
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com