Ποια είναι η διαφορά μεταξύ μιας διεργασίας και ενός νήματος;

Ποια είναι η τεχνική διαφορά μεταξύ μιας διεργασίας και ενός νήματος;

Έχω την αίσθηση ότι μια λέξη όπως 'process' χρησιμοποιείται υπερβολικά και ότι υπάρχουν επίσης νήματα υλικού και λογισμικού. Τι λέτε για τις διεργασίες ελαφρού βάρους σε γλώσσες όπως η Erlang; Υπάρχει κάποιος οριστικός λόγος για τη χρήση του ενός όρου έναντι του άλλου;

Λύση

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

Δεν είμαι σίγουρος σε ποια νήματα "υλικού" έναντι "λογισμικού" μπορεί να αναφέρεστε. Τα νήματα είναι ένα χαρακτηριστικό του λειτουργικού περιβάλλοντος και όχι ένα χαρακτηριστικό της CPU (αν και η CPU έχει συνήθως λειτουργίες που καθιστούν τα νήματα αποδοτικά).

Η Erlang χρησιμοποιεί τον όρο "διεργασία" επειδή δεν εκθέτει ένα μοντέλο πολυπρογραμματισμού κοινής μνήμης. Η ονομασία "νήματα" θα υπονοούσε ότι έχουν κοινή μνήμη.

Σχόλια (10)

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

Κλεμμένο από εδώ.

Σχόλια (2)

Τόσο τα νήματα όσο και οι διεργασίες είναι ατομικές μονάδες κατανομής πόρων του λειτουργικού συστήματος (δηλαδή υπάρχει ένα μοντέλο ταυτόχρονης χρήσης που περιγράφει τον τρόπο με τον οποίο ο χρόνος της CPU κατανέμεται μεταξύ τους, καθώς και το μοντέλο κατοχής άλλων πόρων του λειτουργικού συστήματος). Υπάρχει μια διαφορά στο:

  • Κοινόχρηστοι πόροι (τα νήματα μοιράζονται εξ ορισμού τη μνήμη, δεν κατέχουν τίποτε άλλο εκτός από τη στοίβα και τις τοπικές μεταβλητές- οι διεργασίες θα μπορούσαν επίσης να μοιράζονται τη μνήμη, αλλά υπάρχει ξεχωριστός μηχανισμός γι' αυτό, που διατηρείται από το λειτουργικό σύστημα)
  • Χώρος κατανομής (χώρος πυρήνα για διεργασίες έναντι χώρου χρήστη για νήματα)

Ο Greg Hewgill παραπάνω ήταν σωστός σχετικά με την έννοια της λέξης "process" στην Erlang, και εδώ υπάρχει μια συζήτηση για το γιατί η Erlang θα μπορούσε να κάνει processes lightweight.

Σχόλια (0)