Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 69126|Απάντηση: 4

[Πηγή] .NET/C# Συλλογή ασφάλειας νημάτων (ταξινόμηση)

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 6/6/2017 5:13:53 μ.μ. | | |
Οι συλλογές που εισάγονται στο .NET Framework 1.0 βρίσκονται στο χώρο ονομάτων System.Collections. Αυτές οι συλλογές, συμπεριλαμβανομένων των συνήθως χρησιμοποιούμενων ArrayList και Hashtable, παρέχουν κάποιο είδος ασφάλειας νήματος μέσω της ιδιότητας Synchronized, η οποία επιστρέφει ένα περιτύλιγμα ασφαλές για νήματα που σχετίζεται με τη συλλογή. Το περιτύλιγμα λειτουργεί κλειδώνοντας ολόκληρο το σετ για κάθε λειτουργία προσθήκης ή αφαίρεσης. Επομένως, κάθε νήμα που προσπαθεί να αποκτήσει πρόσβαση στη συλλογή πρέπει να περιμένει μέχρι να έρθει η σειρά του να αποκτήσει την κλειδαριά. Αυτό δεν είναι επεκτάσιμο και θα οδηγήσει σε σημαντική υποβάθμιση της απόδοσης για μεγάλες συλλογές. Επιπλέον, αυτός ο σχεδιασμός δεν αποτρέπει εντελώς τη διαμάχη. Για περισσότερες πληροφορίες, ανατρέξτε στην ακόλουθη σελίδα στην τοποθεσία Web του MSDN: Συγχρονισμός σε γενικές συλλογές

Η κλάση συλλογής που εισήχθη στο .NET Framework 2.0 βρίσκεται στον χώρο ονομάτων System.Collections.Generic. Αυτές οι κατηγορίες συλλογής περιλαμβάνουν List<T>, Dictionary< TKey, TValue> κ.λπ. Αυτές οι παρέχουν ασφάλεια και απόδοση υψηλότερου τύπου σε σύγκριση με τις .NET Framework 1.0. Ωστόσο, η κλάση συλλογής .NET Framework 2.0 δεν παρέχει συγχρονισμό νημάτων. Κατά την προσθήκη ή την κατάργηση στοιχείων σε πολλά νήματα ταυτόχρονα, ο κωδικός χρήστη πρέπει να παρέχει όλο το συγχρονισμό.

Συνιστάται να χρησιμοποιείτε ταυτόχρονες συλλογής στο .NET Framework 4, επειδή παρέχουν όχι μόνο την ασφάλεια τύπου των κλάσεων συλλογής .NET Framework 2.0, αλλά και πιο αποτελεσματική και ολοκληρωμένη ασφάλεια νημάτων από την ασφάλεια νημάτων που παρέχεται από τη συλλογή .NET Framework 1.0.


Ορισμένοι τύποι ταυτόχρονης συλλογής χρησιμοποιούν ελαφρούς μηχανισμούς συγχρονισμού όπως SpinLock, SpinWait, SemaphoreSlim και CountdownEvent, οι οποίοι είναι νέοι στο .NET Framework 4. Συνήθως, οι παραπάνω τύποι συγχρονισμού χρησιμοποιούν "απασχολημένη περιστροφή" για σύντομο χρονικό διάστημα πριν θέσουν το νήμα στην πραγματική κατάσταση αναμονής. Εάν ο χρόνος αναμονής αναμένεται να είναι πολύ σύντομος, η περιστροφή θα καταναλώσει πολύ λιγότερους υπολογιστικούς πόρους από την αναμονή, η οποία περιλαμβάνει μετατροπές πυρήνα που θα καταναλώσουν πολλούς πόρους. Για συλλογής που χρησιμοποιούν περιστροφή, αυτή η αποτελεσματικότητα σημαίνει ότι πολλά νήματα μπορούν να προσθέτουν και να αφαιρούν στοιχεία με πολύ γρήγορο ρυθμό. Για περισσότερες πληροφορίες σχετικά με τον περιορισμό και τον αποκλεισμό, ανατρέξτε στην ενότητα SpinLock και SpinWait. Οι ConcurrentQueue<T> και ConcurrentStack<T> δεν χρησιμοποιούν καθόλου κλειδώματα. Αντίθετα, βασίζονται σε αλληλένδετες λειτουργίες για την ασφάλεια του νήματος.

διευκρινίζω

Επειδή οι ταυτόχρονες συλλογής υποστηρίζουν το ICollection, παρέχουν υλοποιήσεις για τις ιδιότητες IsSynchronized και SyncRoot, ακόμα και αν δεν σχετίζονται. Το IsSynchronized επιστρέφει πάντα false, ενώ το SyncRoot είναι πάντα null (Τίποτα στη Visual Basic).

Ο παρακάτω πίνακας παραθέτει τους τύπους συλλογής στο χώρο ονομάτων System.Collections.Concurrent.



δακτυλογραφώ
περιγραφή
ΑποκλεισμόςΣυλλογής<T>
Παρέχει<T> κάθε τύπο περιορισμού και αποκλεισμού για την υλοποίηση του IProducerConsumerCollection. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Επισκόπηση BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Το κλειδί/τιμή είναι η ασφαλής εφαρμογή του λεξικού για νήματα.
Ταυτόχρονη ουρά<T>
Εφαρμογή ασφάλειας νήματος ουρών FIFO (first in, first out).
Ταυτόχρονη στοίβα<T>
Ασφαλής υλοποίηση των στοίβων LIFO (last-in, first-out).
Ταυτόχρονη τσάντα<T>
Ασφαλής υλοποίηση νήματος μιας συλλογής στοιχείων εκτός σειράς.
IProducerConsumerCollection<T>
Οι τύποι πρέπει να εφαρμόζονται σεΑποκλεισμόςΣυλλογήςδιεπαφές που χρησιμοποιούνται στην







Προηγούμενος:.net/c# itextsharp για τη δημιουργία κώδικα PDF
Επόμενος:Install-Package: Το "MvvmLightLibs" έχει ήδη μια εξάρτηση που έχει οριστεί για το "CommonServiceLocator"...
Δημοσιεύτηκε στις 8/11/2017 3:24:45 μ.μ. |
Ναι, έμαθα
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 8/2/2021 10:00:41 π.μ. |
Η λίστα είναι<T> ασφαλής για νήματα εάν η λίστα δεν τροποποιηθεί καθόλου κατά τη διάρκεια της επανάληψης.
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 23/3/2021 11:32:46 π.μ. |
Το ConcurrentDictionary υποστηρίζει νέες και ενημερωμένες ενημερώσεις
https://www.itsvse.com/thread-2955-1-1.html

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 24/6/2023 2:20:57 μ.μ. |
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com