Προγραμματισμός

Κατανόηση των ομαδοποιήσεων νήματος στο C #

Ένα νήμα είναι η μικρότερη μονάδα εκτέλεσης σε μια διαδικασία. Μια ομάδα νημάτων περιλαμβάνει έναν αριθμό νημάτων, ή, μια συλλογή νημάτων με ακρίβεια, και μπορεί να χρησιμοποιηθεί για την εκτέλεση πολλών δραστηριοτήτων στο παρασκήνιο.

Γιατί πρέπει να χρησιμοποιήσω ομάδες νημάτων;

Τα νήματα είναι ακριβά καθώς καταναλώνουν πολλούς πόρους στο σύστημά σας για την προετοιμασία, την αλλαγή περιβάλλοντος και την απελευθέρωση των πόρων που καταλαμβάνουν. Κανονικά, όταν ένα νήμα εκτελεί μια λειτουργία εισόδου / εξόδου (χειρισμός αρχείων, λειτουργία βάσης δεδομένων ή πρόσβαση στους πόρους του δικτύου κ.λπ.) το νήμα αποκλείεται από το λειτουργικό σύστημα έως ότου ολοκληρωθεί η λειτουργία I / O. Το νήμα θα συνεχίσει τη λειτουργία του CPU αφού ολοκληρωθεί η λειτουργία I / O.

Μια ομάδα νήματος είναι μια καλή επιλογή όταν θέλετε να περιορίσετε τον αριθμό των νημάτων που εκτελούνται σε μια δεδομένη χρονική στιγμή και θέλετε να αποφύγετε τα γενικά έξοδα δημιουργίας και καταστροφής νημάτων στην εφαρμογή σας. Είναι επίσης μια καλή επιλογή όταν έχετε πολλές εργασίες στην εφαρμογή σας που πρέπει να εκτελεστούν είτε παράλληλα είτε ταυτόχρονα και θα θέλατε να βελτιώσετε την ανταπόκριση της εφαρμογής αποφεύγοντας τους διακόπτες περιβάλλοντος. Για να δημιουργήσετε μια ομάδα νήματος, μπορείτε να επωφεληθείτε από την κλάση System.Threading.ThreadPool.

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να ορίσετε τον ελάχιστο αριθμό νημάτων στην ομάδα νήματος.

ThreadPool.SetMinThreads (50, 50);

Ωστόσο, σημειώστε ότι όταν εκτελείται μια μακροχρόνια εργασία, το νήμα της ομάδας νήματος μπορεί να αποκλειστεί για μεγάλο χρονικό διάστημα. Για να επιδεινωθούν τα πράγματα, τα εισερχόμενα αιτήματα που εξαρτώνται από τα νήματα από το νήμα μπορεί να είναι σε αναμονή ή ακόμη και να απορριφθούν κυρίως επειδή η ομάδα νήματος μπορεί να μην διαθέτει διαθέσιμα νήματα για να χειριστεί ένα εισερχόμενο αίτημα. Το νήμα δεν είναι επίσης καλή επιλογή όταν έχετε νήματα που διαφέρουν στις προτεραιότητές τους ή μπορεί να χρειαστεί να ακυρώσετε ένα νήμα πρόωρα. Ο πρόωρος τερματισμός ενός νήματος υποδηλώνει ότι το νήμα έχει σταματήσει δυναμικά πριν τελειώσει ο χρόνος ανακύκλωσής του.

Πώς λειτουργεί μια ομάδα νήματος;

Στην ουσία, όταν εργάζεστε με ομάδες νήματος, συνήθως δημιουργείτε μια συλλογή νημάτων και θα τα αποθηκεύετε σε ένα νήμα πριν από τη χρήση των νημάτων στην εφαρμογή σας. Όπως και όταν χρειάζεστε ένα νήμα, θα χρησιμοποιούσατε αυτά τα νήματα αντί να δημιουργήσετε νέα νήματα κάθε φορά που η εφαρμογή πρέπει να χρησιμοποιεί ένα νήμα.

Έτσι, η εφαρμογή θα έκανε ένα αίτημα στην ομάδα νήματος για να πάρει ένα νήμα από αυτό, να εκτελέσει δραστηριότητες χρησιμοποιώντας το νήμα και στη συνέχεια να επιστρέψει το νήμα πίσω στην ομάδα νήματος όταν τελειώσει. Η συγκέντρωση νημάτων είναι χρήσιμη σε περιπτώσεις όπου έχετε περισσότερες εργασίες να εκτελέσετε από ό, τι μπορείτε να δημιουργήσετε νήματα (υπάρχει ένα όριο στον μέγιστο αριθμό νημάτων που μπορείτε να δημιουργήσετε ανά διαδικασία) στην εφαρμογή σας.

Πώς μπορώ να βελτιστοποιήσω μια ομάδα νήματος;

Όταν ξεκινά μια διαδικασία, εκχωρείται μια ομάδα νημάτων από το CLR. Λάβετε υπόψη ότι μπορείτε να διαμορφώσετε το μέγεθος της ομάδας νήματος εάν χρειάζεται. Ο χρόνος εκτέλεσης διαχειρίζεται έξυπνα το νήμα. Όταν ξεκινά η ομάδα νήματος, υπάρχει μόνο ένα νήμα στην ομάδα νήματος. Έκτοτε, ο διαχειριστής ομαδικού νήματος (ένα στοιχείο που είναι υπεύθυνο για τη διαχείριση του ομαδικού νήματος) δημιουργεί περισσότερα νήματα και τα αποθηκεύει στην ομάδα νήματος καθώς αυξάνεται το φορτίο της εφαρμογής, δηλαδή, η εφαρμογή χρειάζεται όλο και περισσότερες εργασίες για να εκτελούνται ταυτόχρονα.

Ο αριθμός νημάτων που μπορούν να είναι διαθέσιμοι στο σύνολο νημάτων σε οποιαδήποτε δεδομένη χρονική στιγμή διέπεται από το μέγιστο επιτρεπόμενο όριο νημάτων στο σύνολο νημάτων. Με άλλα λόγια, ο αριθμός των διαθέσιμων νημάτων στην ομάδα νημάτων ποικίλλει από καιρό σε καιρό ανάλογα με την κατανάλωση νημάτων από την εφαρμογή. Μόλις επιτευχθεί το μέγιστο όριο (μέγιστος αριθμός νημάτων στην ομάδα νημάτων), η εφαρμογή δημιουργεί νέα νήματα πολύ πιο σπάνια.

Μπορείτε πάντα να ορίσετε μόνοι σας το ανώτατο όριο των επιτρεπόμενων νημάτων στην ομάδα νήματος εάν χρειάζεται. Για να το κάνετε αυτό, θα πρέπει να επωφεληθείτε από την ιδιότητα ThreadPool.SetMaxThreads. Για να ορίσετε το κατώτερο όριο των νημάτων στην ομάδα νημάτων μπορείτε να χρησιμοποιήσετε την ιδιότητα ThreadPool.SetMinThreads. Το προεπιλεγμένο κατώτερο όριο του αριθμού των νημάτων στο νήμα είναι ένα νήμα ανά επεξεργαστή.