απαιτήσεις: Λόγω των περιορισμένων πόρων του υλικού, το πρόγραμμα πρέπει να καταναλώσει ένα ορισμένο ποσό πόρων υλικού, σε περίπτωση υψηλής ταυτόχρονης χρήσης, εάν ορισμένες μέθοδοι που καταναλώνουν πάρα πολλούς πόρους του προγράμματος δεν είναι περιορισμένες (εξαγωγή μεγάλου όγκου δεδομένων σε πίνακα Excel), μπορεί να επηρεάσει την αδυναμία ολόκληρου του προγράμματος να παρέχει κανονικές υπηρεσίες και επίσης να επηρεάσει την κανονική λειτουργία του λειτουργικού συστήματος.
Σηματοφόρος και SemaphoreSlim Διαφορά
Το SemaphoreSlim και το Semaphore έχουν παρόμοια λειτουργικότητα. Το SemaphoreSlim είναι περίπου 4 φορές ταχύτερο από το Semaphore, αλλά το SemaphoreSlim δεν μπορεί να χρησιμοποιηθεί για σηματοδότηση μεταξύ διεργασιών.
Ο λόγος για τη βελτίωση της απόδοσης είναι επειδή η κλάση SemaphoreSlim παρέχει μια ελαφριά εναλλακτική λύση στην κλάση Semaphore, η οποία δεν χρησιμοποιεί τον σηματοφόρο πυρήνα των Windows. Ουσιαστικά, εάν δεν χρειάζεται να ονομάσετε σηματοφόρους, χρησιμοποιήστε την κλάση SemaphoreSlim.
Το SemaphoreSlim βασίζεται στο SpinWait και το Monitor, επομένως ένα νήμα που περιμένει να πάρει ένα κλείδωμα καταναλώνει μια περίοδο κύκλων CPU, ελπίζοντας να αποκτήσει το κλείδωμα πριν δώσει τη θέση του σε ένα άλλο νήμα. Εάν αυτό δεν συμβεί, τότε το νήμα επιτρέπει στο σύστημα να αλλάξει το περιβάλλον και να προσπαθήσει ξανά όταν το λειτουργικό σύστημα προγραμματίσει ξανά αυτό το νήμα (καταναλώνοντας ορισμένους κύκλους CPU). Εάν η αναμονή είναι μεγάλη, αυτή η λειτουργία μπορεί να καταναλώσει πολλούς κύκλους CPU. Έτσι, η καλύτερη περίπτωση για αυτήν την εφαρμογή είναι ότι τις περισσότερες φορές δεν υπάρχει χρόνος αναμονής και μπορείτε να πάρετε την κλειδαριά σχεδόν αμέσως. Το Semaphore βασίζεται σε υλοποιήσεις στον πυρήνα του λειτουργικού συστήματος, επομένως κάθε φορά που αποκτάται ένα κλείδωμα, χρειάζονται αρκετοί κύκλοι CPU, αλλά μετά από αυτό το νήμα απλώς αδρανοποιείται για να πάρει το χρόνο που χρειάζεται για να πάρει το κλείδωμα.
Τεκμηρίωση σηματοφόρου: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 bit.
Ο πηγαίος κώδικας έχει ως εξής:
Οι αποδόσεις είναι οι εξής:
|