Το Thread Pool είναι στην πραγματικότητα μια εφαρμογή της τεχνολογίας συγκέντρωσης Η βασική ιδέα της ομαδοποίησης είναι να πραγματοποιηθεί η επαναχρησιμοποίηση των πόρων και να αποφευχθεί η επιβάρυνση που προκαλείται από την επαναλαμβανόμενη δημιουργία και καταστροφή πόρων. Η ομάδα νημάτων μπορεί να διαχειριστεί μια δέσμη νημάτων, έτσι ώστε τα νήματα να μην καταστραφούν μετά την ολοκλήρωση της εργασίας, αλλά να συνεχίσουν να επεξεργάζονται εργασίες που έχουν υποβληθεί από άλλα νήματα.
Οφέλη από τη χρήση της πισίνας με νήματα
Μειώστε την κατανάλωση πόρων. Μειώστε το κόστος δημιουργίας και καταστροφής νημάτων επαναχρησιμοποιώντας τα δημιουργημένα νήματα.
Βελτιώστε την ταχύτητα απόκρισης. Όταν φτάσει μια εργασία, η εργασία μπορεί να εκτελεστεί αμέσως χωρίς να περιμένει να δημιουργηθεί το νήμα.
Βελτιώστε τη διαχειρισιμότητα του νήματος. Τα νήματα είναι σπάνιοι πόροι, εάν δημιουργηθούν χωρίς περιορισμούς, όχι μόνο θα καταναλώσουν τους πόρους του συστήματος, αλλά θα μειώσουν επίσης τη σταθερότητα του συστήματος.
Παράμετροι κατασκευής
corePoolSize: χρησιμοποιείται για εργασία στο thread poolΑριθμός νημάτων πυρήνα。
μέγιστο μέγεθος πισίνας:Μέγιστος αριθμός νημάτων , ο μέγιστος αριθμός νημάτων που επιτρέπεται να δημιουργηθούν από το σύνολο νημάτων. Όταν ο αριθμός των νημάτων στο χώρο συγκέντρωσης νημάτων φτάσει στο corePoolSize, εάν η ουρά εργασιών είναι πλήρης και χρειάζεται επεξεργασία νέων εργασιών, η ομάδα νημάτων θα δημιουργήσει νέα νήματα (αλλά ο συνολικός αριθμός δεν υπερβαίνει το μέγιστο μέγεθος PoolSize) για την επεξεργασία αυτών των εργασιών. (Αυτό ισοδυναμεί με όταν η περιοχή της ουράς είναι πλήρης, τα επόμενα νήματα μπορούν να μεταπηδήσουν απευθείας στην ουρά.) Εάν ο αριθμός των εργασιών υπερβαίνει το μέγιστο Μέγεθος PoolSize και η ουρά εργασιών είναι πλήρης, η ομάδα νημάτων θα επεξεργαστεί αυτές τις μη εκτελέσιμες εργασίες σύμφωνα με την πολιτική απόρριψης.
keepAliveTime: Ο χρόνος επιβίωσης των νημάτων που δημιουργήθηκαν μετά την υπέρβαση του corePoolSize ή όλων των νημάτωνΜέγιστος χρόνος επιβίωσης, ανάλογα με τη διαμόρφωση.
μονάδα:keepAliveTime 的μονάδα χρόνου。
ουρά εργασίας:ουρά εργασιών , είναι μια ουρά αποκλεισμού Όταν ο αριθμός των νημάτων φτάσει τον αριθμό των νημάτων του πυρήνα, η εργασία θα αποθηκευτεί στην ουρά αποκλεισμού. Συνήθεις υλοποιήσεις: Κλάσεις υλοποίησης της διεπαφής BlockingQueue, όπως ArrayBlockingQueue, LinkedBlockingQueue κ.λπ.
threadFactory: χρησιμοποιείται για τη δημιουργία νημάτων μέσα στο thread poolεργοστάσιο。
χειριστής:Άρνηση πολιτικής;Όταν η ουρά είναι γεμάτη και ο αριθμός των νημάτων φτάσει τον μέγιστο αριθμό νημάτων, αυτή η μέθοδος θα κληθεί να επεξεργαστεί την εργασία.
Πώς να ρυθμίσετε τις παραμέτρους
1. Προσδιορίστε τον αριθμό των βασικών νημάτων (corePoolSize)
Εργασίες έντασης CPU: Για εργασίες έντασης CPU, είναι σύνηθες να ορίζετε τον αριθμό των νημάτων πυρήνα μεταξύ 1 και 2 φορές τον αριθμό των πυρήνων της CPU. Αυτό διασφαλίζει την πλήρη χρήση των πόρων της CPU, αποφεύγοντας τους υπερβολικούς διακόπτες περιβάλλοντος.
Εργασίες με ένταση IO: Για εργασίες έντασης IO, καθώς τα νήματα δεν καταλαμβάνουν την CPU όταν περιμένουν λειτουργίες IO, μπορούν να οριστούν περισσότερα νήματα πυρήνα. Σε γενικές γραμμές, ο αριθμός των νημάτων πυρήνα μπορεί να ρυθμιστεί σε περισσότερο από 2 φορές τον αριθμό των πυρήνων της CPU, έτσι ώστε περισσότερες εργασίες να μπορούν να υποβληθούν σε επεξεργασία κατά την αναμονή για IO.
Μικτές εργασίες: Εάν η εφαρμογή σας περιέχει εργασίες έντασης CPU και IO, πρέπει να εξισορροπήσετε τις ρυθμίσεις για τον αριθμό των βασικών νημάτων με βάση τη συγκεκριμένη κατάσταση.
2. Προσδιορίστε τον μέγιστο αριθμό νημάτων (maximumPoolSize)
Περιβάλλοντα περιορισμένων πόρων: Σε περιβάλλοντα με περιορισμούς πόρων (όπως ενσωματωμένα συστήματα ή διακομιστές cloud), ο μέγιστος αριθμός νημάτων πρέπει να περιοριστεί για να αποτραπεί η κατάληψη πόρων από πάρα πολλά νήματα.
Σύστημα υψηλής συγχρονισμού: Για συστήματα που πρέπει να χειριστούν μεγάλο αριθμό ταυτόχρονων αιτημάτων, ο μέγιστος αριθμός νημάτων μπορεί να αυξηθεί κατάλληλα για να βελτιωθούν οι δυνατότητες ταυτόχρονης επεξεργασίας του συστήματος. Ωστόσο, η ρύθμιση του μέγιστου αριθμού νημάτων θα πρέπει να λαμβάνεται υπόψη πλήρως με βάση τη χωρητικότητα φορτίου και τις συνθήκες πόρων του συστήματος.
Εφαρμογές έντασης CPU: Για εφαρμογές με ένταση CPU, μπορείτε συνήθως να ρυθμίσετε τον χρόνο αδράνειας νήματος σε μικρότερη τιμή, επειδή οι πόροι της CPU είναι πολύ πολύτιμοι και δεν θέλετε να καταλαμβάνετε πόρους πάρα πολλά νήματα αδράνειας. Σε ορισμένες περιπτώσεις, μπορεί ακόμη και να οριστεί στο 0, υποδεικνύοντας ότι δεν διατηρούνται νήματα χωρίς πυρήνα.
Εφαρμογές έντασης IO: Για εφαρμογές έντασης IO, καθώς τα νήματα δεν καταλαμβάνουν πόρους της CPU κατά την αναμονή για λειτουργίες IO, ο χρόνος αδράνειας νήματος μπορεί να ρυθμιστεί σε μεγαλύτερη τιμή (όπως περισσότερο από 1 λεπτό) για να αποφευχθεί η συχνή εκκίνηση και η καταστροφή νημάτων τα γενικά έξοδα απόδοσης που προκαλούνται.
4. Επιλέξτε την ουρά εργασιών (workQueue)
οριοθετημένη ουρά : Η χρήση μιας περιορισμένης ουράς μπορεί να περιορίσει τον χρόνο αναμονής των εργασιών στην ουρά και να αποφύγει την υπερχείλιση μνήμης λόγω πάρα πολλών εργασιών. Ωστόσο, εάν το μήκος της ουράς είναι πολύ μικρό, οι εργασίες ενδέχεται να απορριφθούν. (Γενικά επιλέξτε περιορισμένη ουρά)
Απεριόριστη ουρά: Η χρήση μιας ουράς χωρίς περιορισμούς μπορεί να αποθηκεύσει στην προσωρινή μνήμη όλες τις εργασίες όσο το δυνατόν περισσότερο, αλλά πρέπει να δώσετε προσοχή στα ζητήματα κατανάλωσης μνήμης. Εάν χρησιμοποιείται μια απεριόριστη ουρά, η παράμετρος μέγιστου αριθμού νημάτων του χώρου συγκέντρωσης νημάτων μπορεί να καταστεί άκυρη επειδή η ομάδα νημάτων δεν επιχειρεί να δημιουργήσει νέα νήματα για την επεξεργασία εργασιών στην ουρά.
5. Διαμόρφωση εργοστασίου νήματος (threadFactory)
Το Thread factory χρησιμοποιείται για τη δημιουργία νέων νημάτων. Προσαρμόζοντας το εργοστασιακό νήμα, μπορείτε να ορίσετε χαρακτηριστικά όπως η προτεραιότητα νήματος και η κατάσταση νήματος δαίμονα και μπορείτε επίσης να ορίσετε ουσιαστικά ονόματα για νήματα για να διευκολύνετε τη διάγνωση προβλημάτων στο JVM.
6. Διαμόρφωση πολιτικής απόρριψης (χειριστής)
Όταν ο χώρος συγκέντρωσης νημάτων δεν μπορεί να επεξεργαστεί νέες εργασίες (δηλαδή, ο αριθμός των νημάτων έχει φτάσει στο μέγιστο PoolSize και η ουρά εργασιών είναι πλήρης), πρέπει να διαμορφωθεί μια πολιτική απόρριψης για τη διαχείριση αυτών των μη εκτελέσιμων εργασιών.Οι κοινές στρατηγικές απόρριψης περιλαμβάνουνΡίξτε μια εξαίρεση απευθείας、Χρησιμοποιήστε το νήμα του καλούντος για να εκτελέσετε την εργασία、Αγνοήστε νέες εργασίες και απορρίψτε τις παλαιότερες εργασίες στην ουρά Περίμενε. Μπορείτε επίσης να προσαρμόσετε την πολιτική απόρριψης όπως απαιτείται.