Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Νήματα στη Java Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Νήματα στη Java Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία"— Μεταγράφημα παρουσίασης:

1 Νήματα στη Java Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία
Πέτσιος Στέφανος Κων/νος Σαλτέας – Καλογεράς Παναγιώτης

2 Περιεχόμενα Τι είναι τα νήματα Χαρακτηριστικά Νημάτων
Σχέση Νημάτων – Διεργασιών Υλοποίηση Νημάτων στην Java Demo

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

4 Χαρακτηριστικά Νημάτων
Ένα νήμα μπορεί να έχει ανεξάρτητη ροή ελέγχου, και να είναι προγραμματίσιμο γιατί διατηρεί: Στοίβα Ιδιότητες χρονοπρογραμματισμού (όπως προτεραιότητα) Σύνολο σημάτων σε αναμονή και σε διακοπή Δεδομένα των νημάτων.

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

6 Χαρακτηριστικά Νημάτων

7 Χαρακτηριστικά Διεργασιών
Μία διεργασία δημιουργείται από το λειτουργικό σύστημα. Οι διεργασίες περιέχουν πληροφορίες για τους πόρους του προγράμματος, καθώς και για την κατάσταση εκτέλεσης του προγράμματος, συμπεριλαμβανομένων: Ταυτότητα διεργασίας, ταυτότητα ομάδας διεργασίας, ταυτότητα χρήστη κ.τ.λ. Περιβάλλον εκτέλεσης Κατάλογος εργασίας Εντολές του προγράμματος Καταχωρητές

8 Χαρακτηριστικά Διεργασιών
Στοίβα Κοινός χώρος διευθύνσεων, σωρός δεδομένων και μνήμης Δείκτες αρχείων Διαμοιραζόμενες βιβλιοθήκες Εργαλεία διαδιεργασιακής επικοινωνίας (όπως ουρές μηνυμάτων, σωληνώσεις, σημαφόροι, ή κοινή μνήμη)

9 Χαρακτηριστικά μία διεργασίας

10 Σχέση Νημάτων και Διεργασιών
Δυο διαφορετικά νήματα μέσα σε ένα πρόγραμμα έχουν τη δυνατότητα πρόσβασης σε κάποιο αντικείμενο του προγράμματος ενώ δυο διαφορετικές διεργασίες συνήθως βλέπουν διαφορετικά αντίγραφα του ίδιου αντικειμένου. Σε μία διεργασία μπορούν να ανήκουν πολλά νήματα. H δημιουργία των νημάτων γίνεται γρηγορότερα από τη δημιουργία των διεργασιών ( αν και η atlantis.cs.uoi.gr βέβαια έχει άλλη άποψη!!!).

11 Σχέση Νημάτων και Διεργασιών
Η δημιουργία διεργασιών είναι πιο «ακριβή» από άποψη χώρου, διότι ή μνήμη του πατέρα αντιγράφεται στο παιδί. Η επικοινωνία μεταξύ των διεργασιών είναι πιο χρονοβόρα από την επικοινωνία μεταξύ των νημάτων.

12 Σχέση Νημάτων και Διεργασιών

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

14 Νημάτα μέσα σε Διεργασίες
Τα νήματα μέσα στις διεργασίες μπορεί να μοιράζονται δεδομένα και πηγές αποδοτικά σε σύγκριση όταν βρίσκονται σε διαφορετικές διεργασίες. Τα νήματα σε μια διεργασία δεν είναι προστατευμένα μεταξύ τους.

15 Νήματα στην Java

16 Τρόποι για την υλοποίηση νέων νημάτων εκτέλεσης
Πρώτος τρόπος Δημιουργείται μια νέα κλάση η οποία υλοποιεί τη διαπροσωπεία Runnable Στη κλάση αυτή δηλώνεται μια μέθοδος run η οποία υλοποιεί τη νέα εργασία Παράδειγμα: class CountingJob implements Runnable { private int counter; public CountingJob (int c) { counter = c; } public void run( ) { while(true) System.out.println(counter++); }

17 Τρόποι για την υλοποίηση νέων νημάτων εκτέλεσης
Παράδειγμα: class CountingJob extends Thread { private int counter; public CountingJob (int c) { counter = c; start(); } public void run( ) { while(true) System.out.println(counter++); Δεύτερος τρόπος Δημιουργείται μια νέα υποκλάση της κλάσης Thread Στη υποκλάση αυτή δηλώνεται μια μέθοδος run η οποία υλοποιεί τη νέα εργασία

18 Χειρισμός Νημάτων στην JAVA
Εκκίνηση και τον τερματισμός της εκτέλεσης ενός νήματος Μέθοδοι: start() και stop() Προσωρινή παύση της εκτέλεσης ενός νήματος και την επανεκκίνηση της Μέθοδοι:suspend και resume Καθυστέρηση ενός νήματος εκτέλεσης κατά n milliseconds. sleep(n)

19 Χειρισμός Νημάτων στην JAVA
Χαρακτηρισμός νήματος ως Δαίμονα Μέθοδος: setDaemon(Boolean x) Καθορισμό της προτεραιότητας εκτέλεσης του νήματος Μέθοδος: setPriority Παραχωρήση από ένα νήμα του χρόνου υπολογισμού που του έχει δοθεί Μέθοδος: yield Επιστροφή του τρέχοντος νήματος εκτέλεσης Μέθοδος: currentThread

20 Μηχανισμός για το συγχρονισμό των νημάτων εκτέλεσης
Μηχανισμός για το συγχρονισμό των νημάτων εκτέλεσης Η Java παρέχει έναν αρκετά απλό και εύχρηστο μηχανισμό για το συγχρονισμό των νημάτων εκτέλεσης. Ο μηχανισμός αυτός βασίζεται στην έννοια του κλειδώματος Προκειμένου να επιτευχθεί αποκλειστική πρόσβαση σε ένα σύνολο μεθόδων ενός αντικειμένου, αυτές δηλώνονται ως synchronized

21 Μηχανισμός για το συγχρονισμό των νημάτων εκτέλεσης
Μηχανισμός για το συγχρονισμό των νημάτων εκτέλεσης Η Java παρέχει τη δυνατότητα συγχρονισμού με τις μεθόδους wait και notify της κλάσης Object. Οι κλήσεις σε αυτές τις μεθόδους πραγματοποιούνται σχεδόν πάντα μέσα από συγχρονισμένες μεθόδους ή τμήματα κώδικα.

22 Threads και RMI Η ταυτόχρονη χρήση Threads και RMI για την υλοποίηση client – server μοντέλου με το συμβατικό τρόπο δεν είναι δυνατή. Παρόλα αυτά, τα Threads μπορούν να χρησιμοποιηθούν για τη παράλληλη εκτέλεση άλλων εργασιών.

23 Γιατί όχι RMI και Threads μαζί
Το RMI από μόνο του υποστηρίζει το serializable interface. Αυτό σημαίνει ότι: για κάθε εισερχόμενη σύνδεση, δημιουργεί ένα νέο νήμα το οποίο το συσχετίζει και με ένα αντικείμενο Όλα τα αντικείμενα αυτά, τα οποία πλέον εκτελούνται παράλληλα, μπαίνουν σε μία ουρά, και φράσσονται και συγχρονίζονται αυτόματα από το RMI χωρίς την επέμβαση του προγραμματιστή.

24 Γιατί όχι RMI και Threads μαζί
Το RMIRegistry αναλαμβάνει να αναμένει για συνδέσεις Σε αντίθεση με τη C, στη Java τα νήματα αναλαμβάνουν τις λειτουργίες ενός αντικειμένου και όχι ξεχωριστών συναρτήσεων

25 Πιθανή Λύση Το RMI αναμένει να ακούσει για αιτήσεις, και στη συνέχεια δημιουργεί νήματα, τα οποία να εκτελούν εργασίες ως ένα ξεχωριστό αντικείμενο το καθένα. Ο συγχρονισμός θα γίνεται με τις κλήσεις συγχρονισμού των νημάτων

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

27 Αναφορές Αλέξανδρος Καρακασίδης, «Πολυνηματικός Προσομοιωτής Ασύρματου τοπικού δικτύου ΙΕΕΕ », Διπλωματική Εργασία, Τμήμα Πληροφορικής, Πανεπιστήμιο Ιωαννίνων, Μάρτιος 2002. Σοφοκλής Εφραιμίδης, Αντώνης Καβάρνος, Τάσος Κουτουμάνος, Βασίλης Παπαδήμος, Νίκος Παπασπύρου, Γιάννης Πατινιωτάκης, Κλειώ Σγουροπούλου, Εισαγωγή στη Γλώσσα Προγραμματισμού Java. Αndrew S. Tanenbaum and Maarten Van Steen, "Distributed Systems: Principles and Paradigms", Prentice Hall, 2002

28 ΤΕΛΟΣ


Κατέβασμα ppt "Νήματα στη Java Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google