Τι είναι η πισίνα με νήματα; Γιατί να χρησιμοποιήσετε πισίνες με νήματα; Πώς να χρησιμοποιήσετε τις πισίνες με νήματα;
1. Τι είναι η πισίνα με νήματα;
Η κλάση ThreadPool του .NET Framework παρέχει μια ομάδα νημάτων που μπορεί να χρησιμοποιηθεί για την εκτέλεση εργασιών, την αποστολή στοιχείων εργασίας, το χειρισμό ασύγχρονων εισόδων/εξόδων, την αναμονή για λογαριασμό άλλων νημάτων και το χειρισμό χρονόμετρων. Τι είναι λοιπόν μια πισίνα με νήματα; Η ομάδα νημάτων είναι στην πραγματικότητα μια "πισίνα" που αποθηκεύει αντικείμενα νημάτων και παρέχει ορισμένες βασικές μεθόδους, όπως ο ορισμός του ελάχιστου/μέγιστου αριθμού νημάτων στην πισίνα, η ουρά των μεθόδων που πρέπει να εκτελεστούν κ.λπ. Το ThreadPool είναι μια στατική κλάση, επομένως μπορεί να χρησιμοποιηθεί απευθείας χωρίς τη δημιουργία αντικειμένων.
2. Γιατί να χρησιμοποιήσετε πισίνες με νήματα; Ποια είναι τα οφέλη;
Ο επίσημος ιστότοπος της Microsoft αναφέρει τα εξής: Πολλές εφαρμογές δημιουργούν μεγάλο αριθμό νημάτων που βρίσκονται σε αδράνεια, περιμένοντας να συμβούν συμβάντα. Υπάρχουν επίσης πολλά θέματα που μπορεί να πέσουν σε χειμερία νάρκη μόνο και μόνο για να ξυπνούν περιοδικά για να κάνουν δημοσκόπηση για αλλαγμένες ή ενημερωμένες πληροφορίες κατάστασης. Ομάδες νημάτων, που σας επιτρέπουν να χρησιμοποιείτε τα νήματα πιο αποτελεσματικά μέσω μιας ομάδας νημάτων εργαζομένων που διαχειρίζεται το σύστημα.
Για να το θέσω απλά, κάθε νέο νήμα πρέπει να καταλαμβάνει χώρο στη μνήμη και άλλους πόρους, και με τόσα πολλά νέα νήματα, πολλά από αυτά είναι αδρανή ή περιμένουν να απελευθερωθούν πόροι. Υπάρχουν πολλά νήματα που κάνουν μόνο κάποια μικρή δουλειά περιοδικά, όπως ανανέωση δεδομένων κ.λπ., τα οποία είναι πολύ σπάταλα για να σχεδιαστούν και είναι σπάνιο ένας μεγάλος αριθμός νημάτων να ξεσπάσει στον πραγματικό προγραμματισμό και στη συνέχεια να τελειώσει σε σύντομο χρονικό διάστημα. Ως εκ τούτου, προτάθηκε η έννοια των ομάδων νημάτων. Εάν η εφαρμογή υποβάλει άλλη αίτηση στο χώρο συγκέντρωσης νημάτων, το νήμα σε κατάσταση εκκρεμότητας ενεργοποιείται και εκτελεί την εργασία χωρίς να δημιουργήσει νέο νήμα, γεγονός που εξοικονομεί πολλά γενικά έξοδα. Το σύστημα θα καταστρέψει αυτόματα τα νήματα μόνο όταν ο αριθμός των νημάτων φτάσει τον μέγιστο αριθμό νημάτων. Επομένως, η χρήση ομάδων νημάτων μπορεί να αποφύγει μεγάλα έξοδα δημιουργίας και καταστροφής, να έχει καλύτερη απόδοση και σταθερότητα και, δεύτερον, οι προγραμματιστές μπορούν να επικεντρωθούν σε άλλες εργασίες παραδίδοντας νήματα στη διαχείριση συστήματος.
3. Πώς μπορώ να χρησιμοποιήσω τις ομάδες νημάτων;
Στην πραγματικότητα, οι πισίνες με νήματα είναι πολύ απλές στη χρήση, ως εξής
α. Ορίστε τη μέγιστη και την ελάχιστη ομάδα νημάτων:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Ορίστε τον αριθμό των αιτημάτων για μια ομάδα νημάτων που μπορούν να είναι ενεργά ταυτόχρονα. Όλα τα αιτήματα που είναι μεγαλύτερα από αυτόν τον αριθμό θα παραμείνουν στην ουρά μέχρι να γίνει διαθέσιμο το νήμα του χώρου συγκέντρωσης νημάτων. Μπορείτε επίσης να ορίσετε τον ελάχιστο αριθμό νημάτων.
β. Προσθέστε εργασίες στο χώρο συγκέντρωσης νημάτων:
ThreadPool.QueueUserWorkItem(new WaitCallback(όνομα μεθόδου));
ή ThreadPool.QueueUserWorkItem(new WaitCallback(όνομα μεθόδου), παράμετρος);
Για παράδειγμα, εάν το πολύ 5 νήματα στη δεξαμενή νημάτων εκτελεί μια μέθοδο 60 φορές, ο συνολικός μισθός για 5 χρόνια έχει ως εξής:
Εάν δεν χρησιμοποιείτε τη συγκέντρωση νημάτων, ίσως χρειαστεί να ανοίξετε 60 νήματα για να εκτελέσετε τη μέθοδο Run() ασύγχρονα, κάτι που είναι σπατάλη πόρων χώρου. Τώρα χρησιμοποιούμε έως και 5 νήματα, τα οποία μπορούν να εκτελεστούν σε 1 δευτερόλεπτο και η απόδοση και η απόδοση είναι πολύ καλές.
|