Изисквания: Поради ограничените ресурси на хардуера, програмата трябва да използва определено количество хардуерни ресурси; в случай на висока конкурентност, ако някои методи, които използват твърде много ресурси на програмата, не са ограничени (експортиране на голямо количество данни в 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. Изчакайте(0): Методът няма да бъде блокиран. Ще тества състоянието на дръжката за чакане и ще върне веднага. Изчакайте: Блокира текущата нишка, докато не влезе в SemaphoreSlim, като задава таймаут с 32-битов подписан цяло число.
Изходният код е следният:
Визуализациите са както следва:
|