Wymagania: Ze względu na ograniczone zasoby sprzętowe program musi zużywać określoną ilość zasobów sprzętowych; w przypadku dużej równocześności, jeśli niektóre metody zużywające zbyt dużo zasobów programu nie są ograniczone (eksport dużej ilości danych do tabeli Excel), może to wpłynąć na niezdolność całego programu do zapewnienia normalnych usług, a także na normalne działanie systemu operacyjnego.
Semafor i SemaforSmukłe różnice
SemaphoreSlim i Semaphore są podobne pod względem funkcjonalności. SemaphoreSlim jest około 4 razy szybszy niż Semaphore, ale SemaphoreSlim nie może być używany do sygnalizacji międzyprocesowej.
Powodem poprawy wydajności jest to, że klasa SemaphoreSlim stanowi lekką alternatywę dla klasy Semaphore, która nie wykorzystuje semaforu jądra Windows. Zasadniczo, jeśli nie musisz nazywać semaforów, użyj klasy SemaphoreSlim.
SemaphoreSlim opiera się na SpinWait i Monitor, więc wątek czekający na zablokowanie zużywa okres cykli CPU, licząc na zdobycie blokady, zanim ustąpi miejsca kolejnemu wątkowi. Jeśli to się nie dzieje, wątek pozwala systemowi zmienić kontekst i spróbować ponownie, gdy system operacyjny ponownie zaplanuje ten wątek (zużywając kilka cykli CPU). Jeśli oczekiwanie jest długie, ten tryb może pochłaniać dużo cykli procesora. Najlepszym rozwiązaniem tej implementacji jest to, że przez większość czasu nie ma czasu oczekiwania i można uzyskać zamek niemal natychmiast. Semafor opiera się na implementacjach w jądrze systemu, więc za każdym razem, gdy zostanie zablokowany, zajmuje to sporo cykli CPU, ale potem wątek po prostu hibernuje, aby uzyskać czas potrzebny na jej uzyskanie.
Dokumentacja semaforów:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 Dokumentacja SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Przed wykonaniem metody najczęściej stosowane metody oczekiwania są następująceZadzwoń zgodnie z rzeczywistą sytuacją swojej firmy!
Wait(): Blokuje wątek, dopóki nie wejdzie do SemaphoreSlim. Wait(0): Metoda nie zostanie zablokowana. Sprawdzi stan uchwytu oczekiwania i natychmiast wróci. Wait: Blokuje bieżący wątek, dopóki nie wejdzie do SemaphoreSlim, przy jednoczesnym określeniu timeoutu za pomocą 32-bitowej liczby całkowitej ze znakiem.
Kod źródłowy przedstawia się następująco:
Przedstawienia przedstawiają się następująco:
|