Ποια είναι η διαφορά μεταξύ του semaphore και του pool of threads;


Απάντηση 1:

Είναι δύο εντελώς διαφορετικές έννοιες. Το Semaphore είναι ένας μηχανισμός σηματοδότησης / συγχρονισμού. Χρησιμοποιείται για την επικοινωνία μεταξύ των διαδικασιών. Μπορεί επίσης να χρησιμοποιηθεί για τον έλεγχο της πρόσβασης σε κοινόχρηστους πόρους.

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

Αυτή η δεξαμενή νήματος μπορεί επίσης να κλιμακωθεί δυναμικά.

Συνοψίζοντας, θα επαναλάβω ότι δεν υπάρχει σύνδεση ή εξάρτηση μεταξύ του semafor και του pool of threads.


Απάντηση 2:

Οι προηγούμενες απαντήσεις είναι όλες σωστές. Θέλω απλώς να προσθέσω ότι μπορούν να χρησιμοποιηθούν και τα semaphores για να περιοριστεί ο αριθμός των νημάτων. Χρησιμοποιείται ένα σηματοφόρο για τον περιορισμό των πόρων και αυτός ο πόρος μπορεί να είναι ο αριθμός των νημάτων. Η διαφορά είναι ότι χρησιμοποιείτε ένα σηματοφόρο αυτόν τον τρόπο περιορίζει τον αριθμό των νημάτων που εκτελείται ενεργά, όχι ο αριθμός των δημιουργημένων κλωστών. Για παράδειγμα, λέτε ότι χρησιμοποιείτε 10 θέματα για να χειριστείτε 1000 εργασίες. Το νήμα 1 τελειώνει πρώτα και καταστρέφεται και στη συνέχεια μπορεί να δημιουργηθεί ένα νέο νήμα για να χειριστεί την εργασία 11. Ανά πάσα στιγμή υπάρχουν μόνο 10 νήματα, αλλά τελικά δημιουργούνται και καταστρέφονται συνολικά 1000 κλωστές. Το pool pool, από την άλλη πλευρά, δημιουργεί μόνο 10 κλωστές. Όταν ολοκληρωθεί το νήμα 1, δεν καταστρέφεται αλλά στη συνέχεια συνεχίζει να χειρίζεται την επόμενη εργασία. Δημιουργώντας και καταστρέφοντας τα νήματα χρειάζεστε πολύ χρόνο, έτσι ώστε η πισίνα νήμα είναι προφανώς ο συνιστώμενος τρόπος αντιμετώπισης καταστάσεων όπως αυτό


Απάντηση 3:

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

Το Semaphore χρησιμοποιείται επίσης για την αποστολή σημάτων μεταξύ των νημάτων για να αποφευχθούν τα χαμένα σήματα,

ThreadPool:

Οι θεματικές συλλογές χρησιμοποιούνται όταν χρειάζεται να περιορίσετε τον αριθμό των νημάτων που τρέχουν στην εφαρμογή σας ταυτόχρονα με την επιβάρυνση της απόδοσης που συνδέεται με την εκκίνηση ενός νέου νήματος, οπότε αντί να ξεκινήσετε ένα νέο νήμα για κάθε εργασία που θα εκτελείται ταυτόχρονα, η εργασία μπορεί να περάσει σε μια δεξαμενή νήματος. Μόλις η δεξαμενή έχει τυχόν αδρανείς κλωστές, η εργασία εκχωρείται σε ένα από αυτά και εκτελείται. Εσωτερικά οι εργασίες εισάγονται σε ουρά αποκλεισμού από την οποία απορρίπτονται τα νήματα στην πισίνα. Όταν μια νέα εργασία εισάγεται στην ουρά, ένα από τα αδρανειακά νήματα θα το ξεπεράσει με επιτυχία και θα εκτελεστεί. Τα υπόλοιπα νήματα σε αδρανή κατάσταση στην πισίνα θα μπλοκαριστούν και θα περιμένουν να αποκρύψουν τα καθήκοντα.

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

Έτσι, βασικά είναι δύο διαφορετικές έννοιες

Το "Java Concurrency in Practice" είναι ένα από τα καλύτερα βιβλία για να κατανοήσουμε τις έννοιες του multithreading !!