Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Threads...

Îåêßíçóå áðü ôï ìÝëïò thomasinfo. Τελευταία δημοσίευση από το μέλος axaros στις 21-07-2006, 11:56. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-07-2006, 10:57 14995

    Threads...

    Χαιρετώ όλους στην παρέα.

    Είμαι developer, νέο μέλος στο ditNetZone.gr και σχετικά νέος στο χώρο της τεχνολογίας .NET

    Είναι πολύ ευχάριστω που υπάρχει μια Ελληνική κοινότητα στο χώρο και απ' οτι βλέπω στο μικρό αυτό διάστημα μάλλον έχει δύναμη.

    Θα ήθελα να ρωτήσω το εξής:

    1)Μία περιγραφή με όσο το δυνατόν ποιο κοντά στην πράξη εξήγηση για τα threads και πώς λειτουργούν.

    2) Απ' οτι έχω καταλάβει ψάχνοντας και διαβάζοντας ένα thread κοιμάται-ξυπνάει και στο διάστημα που δεν κοιμάται εκτελεί κάποιες λειτουργίες. ΜΕΣΑ σε ένα thread πώς θα συμπεριφερόταν ένας timer? Θα έτρεχε και θα μετρούσε χρόνο συνέχεια ή μόνο στο διάστημα που το thread είναι ενεργό? Αν ένα thread είναι σε WinForm ή σε Service αππλιψατιον υπάρχουν διαφορές και ποιές είναι αυτές?

     

    Ευχαριστώ όλους για το χρόνο που αφιερώνουν στις απαντήσεις που δύνουν και τα αρθρα που γράφουν.

    Ελπίζω κάποια στιγμή σύντομα να είμαι σε θέση να έχω και εγώ απαντήσεις για νέοεισερχόμενους στην τεχνολογία .NET

     

    Θωμάς.

     


    Who Dares Wins
  •  20-07-2006, 11:27 14999 σε απάντηση της 14995

    Απ: Threads...

    Μια ακολουθία γραμμών κώδικα εκτελείται διαδοχικά. Το runtime κρατάει ένα δείκτη για το πια είναι η τρέχουσα εντολή και μόλις ολοκληρωθεί πηγαίνει τον δείκτη στην επόμενη κα την εκτελεί. Αυτό περίπου γίνεται σε ένα thread. Αν θέλεις ταυτόχρονα από μια γραμμή κώδικα να ξεκινήσεις ταυτόχρονα δυο ακολουθίες κώδικα, χωρίς η μια να περιμένει την άλλη, τότε πρέπει να ξεκινήσεις ένα νέο thread. Αυτό περίπου. Για παραδείγματα ψάξε στο google και θα βρεις άπειρα.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  20-07-2006, 12:34 15003 σε απάντηση της 14995

    Απ: Threads...

    Καλώς μας ήρθες Θωμά.

     thomasinfo wrote:

    2) Απ' οτι έχω καταλάβει ψάχνοντας και διαβάζοντας ένα thread κοιμάται-ξυπνάει και στο διάστημα που δεν κοιμάται εκτελεί κάποιες λειτουργίες. ΜΕΣΑ σε ένα thread πώς θα συμπεριφερόταν ένας timer? Θα έτρεχε και θα μετρούσε χρόνο συνέχεια ή μόνο στο διάστημα που το thread είναι ενεργό? Αν ένα thread είναι σε WinForm ή σε Service αππλιψατιον υπάρχουν διαφορές και ποιές είναι αυτές?

    Πρέπει να καταλάβεις ότι η ίδια η εφαρμογή εκτελείται σε ένα thread. Το timer component δημιουργεί ένα δικό του thread και τρέχει πάνω σε αυτό, ακριβώς για τον λόγο ότι θέλουμε ένα ανεξάρτητο time interval που θα εκτελεί κάποια εργασία.

    Είναι δηλαδή δυνατόν μία εφαρμογή να τρέχει για παράδειγμα το update ενός DataSet και την ίδια ώρα το timer1_tick event να αλλάζει το label που δείχνει την ώρα πάνω στην φόρμα. Αυτό χωρίς threading θα ήταν αδύνατο.

    Βέβαια όπως σου είπα ο timer δημιουργεί και τρέχει το thread του αυτόματα. Το ίδιο μπορείς να το κάνεις όμως εσύ προγραμματιστικά, ώστε να έχεις ταυτόχρονες ή συγχρονισμένες λειτουργίες να εκτελούνται.

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

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

  •  20-07-2006, 13:02 15005 σε απάντηση της 14995

    Απ: Threads...

    Αν δηλαδή μέσα σε ένα tread δηλώσω και ξεκινήσω έναν timer που ενεργοποιείται κάθε 3'' και κοιμήσω το αρχικό thread για 5'' τί συμβαίνει; Φαντάζομαι οτι θα χάσω το event του timer ή δεν θα το πάρω στα 3''...
    Who Dares Wins
  •  20-07-2006, 13:20 15006 σε απάντηση της 15005

    Απ: Threads...

     thomasinfo wrote:
    Αν δηλαδή μέσα σε ένα tread δηλώσω και ξεκινήσω έναν timer που ενεργοποιείται κάθε 3'' και κοιμήσω το αρχικό thread για 5'' τί συμβαίνει; Φαντάζομαι οτι θα χάσω το event του timer ή δεν θα το πάρω στα 3''...

    Όχι. Ο timer θα δημιουργήσει το δικό του thread, το οποίο ξέρει πως κάθε 3" θα ενεργοποιείται. Τα thread τρέχουν παράλληλα και ανεξάρτητα, για αυτό υπάρχει και η ανάγκη να τα "κοιμίζουμε" για να τα κρατάμε συγχρονισμένα. Σκέψου περισσότερο ένα timeline με παράλληλα νήματα, τα οποία μπορεί να μήν έχουν κοινή αρχή.

     O timer θα καθυστερήσει μόνο άν "κοιμίσεις" το δικό του thread .

  •  20-07-2006, 13:27 15008 σε απάντηση της 15005

    Απ: Threads...

    Ναι αλλά το event που θα κάνει raise ο timer στα 3'' θα "πιαστεί" από το thread που τον δήλωσε και τον ξεκίνησε (η οποία κοιμάται για άλλα 2'')?
    Who Dares Wins
  •  20-07-2006, 13:29 15009 σε απάντηση της 15005

    Απ: Threads...

    Είναι πιο ασφαλές και άμεσο να το δοκιμάσεις παρά να σου το πούμε εμείς! Εξαρτάται, νομίζω από κάποια πράγματα. Π.χ. αν έχεις μια global μεταβλητή η οποία εκτελείται στο thread που έχεις "κοιμήσει" και προσπαθήσεις να την προσπελάσεις από το event του timer μπορεί να κολήσει το event και να περιμένει να "ξυπνήσει" το άλλο. Γενικά στο threading υπεισέρχεται το θέμα του Thread Safety, το οποίο έχει να κάνει με μερικές απλές σκέψεις όπως αυτή που μόλις εξέφρασα.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  20-07-2006, 13:49 15013 σε απάντηση της 15008

    Απ: Threads...

    Οκ ευχαριστώ,

    κάποιο ΚΑΛΟ reference για διάβασμα περι threads στο web?

    Επίσης κάποιο ΚΑΛΟ βιβλίο για VB.NET που να καλύπτει θέματα σε βάθος?
    Who Dares Wins
  •  20-07-2006, 14:08 15014 σε απάντηση της 15013

    Απ: Threads...

    άνοιξε αν θέλεις ένα άλλο thread (στο forum εννοώ!) για το βιβλίο που ψάχνεις για να αναντήσουν όσοι ξέρουν. Εγώ δεν ξέρω κάποιο...
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  21-07-2006, 11:56 15055 σε απάντηση της 15013

    Απ: Threads...

    Έχω σχεδόν όλη την handbook σειρά. Σου προτείνω το :

    Visual Basic .NET Threading Handbook

    http://www.amazon.com/gp/product/1861007132/002-3123263-1574417?v=glance&n=283155


    Πάνος Αβραμίδης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems