Követelmények: A hardver korlátozott erőforrásai miatt a programnak bizonyos mennyiségű hardvererőforrást kell fogyasztania, magas egyidejű esetben pedig ha olyan módszerek, amelyek túl sok erőforrást fogyasztanak a programban (nagy mennyiségű adat exportálása egy Excel táblába), az befolyásolhatja a teljes program képtelenségét a normál szolgáltatások nyújtására, és az operációs rendszer normál működését is.
Szemafor és szemafórVékony különbség
A SemaphoreSlim és a Semaphore hasonló funkcionalizációjúak. A SemaphoreSlim körülbelül négyszer gyorsabb, mint a Semaphore, de a SemaphoreSlim nem használható folyamatközi jelzésre.
A teljesítményjavulás oka az, hogy a SemaphoreSlim osztály könnyű alternatívát kínál a Semaphore osztályhoz képest, amely nem használja a Windows kernel szemafórot. Lényegében, ha nem kell szemafórokat nevezned kell, használd a SemaphoreSlim osztályt.
A SemaphoreSlim a SpinWait-en és a Monitoron alapul, tehát egy szál, amely zárolásra vár, CPU-ciklusokat fogyaszt el, remélve, hogy megszerzi a zárat, mielőtt egy másik szál átadná a helyet. Ha ez nem történik meg, akkor a szál lehetővé teszi a rendszer számára, hogy a kontextust váltsa és újra próbálkozhasson, amikor az operációs rendszer újra időzíti a szálat (néhány CPU ciklus elfogyasztásával). Ha hosszú a várakozás, ez a mód sok CPU ciklust igényelhet. A legjobb megoldás ehhez a megvalósításhoz, hogy a legtöbb esetben nincs várakozási idő, és szinte azonnal meg lehet kapni a zárat. A Semaphore az operációs rendszer magjában lévő megvalósításokra támaszkodik, így minden zároláskor elég sok CPU ciklust igényel, de utána a szál egyszerűen hibernál, hogy megkapja az időt, ami a zároláshoz szükséges.
Szemafor dokumentáció:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 SemaphoreSlim dokumentáció:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
A metódus végrehajtása előtt a leggyakrabban használt várakozó módszerek a következőkHívj a saját vállalkozásod tényleges helyzete szerint!
Wait(): Blokkolja a szálat, amíg be nem lép a SemaphoreSlim-be. Wait(0): A módszer nem lesz blokkolva. Teszteli a várakozó kilincs állapotát, és azonnal visszavezeti. Várj: Blokkolja a jelenlegi szálat, amíg be nem léphet a SemaphoreSlim-be, miközben időtúllépést ad egy 32 bites aláírt egész szám segítségével.
A forráskód a következő:
A képek a következők:
|