Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 14970|Відповідь: 3

[Джерело] [Справжній бій]. NET/C# використовує SemaphoreSlim для обмеження методів одночасного виконання

[Копіювати посилання]
Опубліковано 19.02.2022 21:23:20 | | | |
Вимоги: Через обмежені ресурси апаратного забезпечення програма повинна споживати певну кількість апаратних ресурсів, у випадку високої паралелності, якщо деякі методи, що споживають надто багато ресурсів програми, не обмежені (експорт великої кількості даних у таблицю Excel), це може вплинути на нездатність всієї програми надавати нормальні сервіси, а також на нормальну роботу операційної системи.

Різниця семафорів і семафорів

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

Причина підвищення продуктивності полягає в тому, що клас SemaphoreSlim є легкою альтернативою класу Semaphore, який не використовує семафор ядра 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.
Wait(0): Метод не буде заблокований. Він перевірить стан ручки очікування і одразу повернеться.
Зачекайте: блокує поточний потік, поки він не зможе увійти в SemaphoreSlim, при цьому вказуючи тайм-аут за допомогою 32-бітного знакового цілого числа.

Вихідний код виглядає так:

Зображення такі:







Попередній:Файли Linux Secretless Login (ssh) або Secret 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