Επικοινωνία μεταξύ διεργασιών - ένας οδηγός εκμάθησης#
Δύο προγράμματα που χρειάζεται να επικοινωνήσουν έχουν μια χούφτα κανάλια να επιλέξουν: έναν σωλήνα, ένα ονομασμένο FIFO στον δίσκο, μια υποδοχή πάνω από το δίκτυο, ένα ζεύγος υποδοχών στη μνήμη ή ένα κομμάτι κοινόχρηστης μνήμης System V. Αυτός ο οδηγός εκμάθησης είναι ένα βιβλίο συνταγών. Κάθε σελίδα σας δίνει ένα πλήρες, εκτελέσιμο πρόγραμμα - έναν παραγωγό και έναν καταναλωτή, ή έναν πελάτη και έναν διακομιστή - που μπορείτε να αντιγράψετε, να εκτελέσετε και να προσαρμόσετε.
Οι μηχανισμοί κάθε καναλιού - τι επιστρέφει η socket, πώς η fork διασπά μια διεργασία, τι κάνει το %SIG - τεκμηριώνονται ήδη στην αναφορά ανά ενσωματωμένη συνάρτηση και στο κεφάλαιο των σημάτων. Αυτός ο οδηγός εκμάθησης δεν τα επαναλαμβάνει. Τα συναρμολογεί σε λειτουργικά προγράμματα IPC και συνδέει κάθε κλήση πίσω στη σελίδα αναφοράς της.
Η PetaPerl τρέχει μόνο σε Linux, οπότε όλα εδώ είναι POSIX. Δεν υπάρχει IPC Win32, ούτε εναλλακτική ονομασμένου σωλήνα σε Windows, ούτε Win32::Process. Οι συνταγές χρησιμοποιούν τις κλήσεις συστήματος που πραγματικά παρέχει ένας πυρήνας Linux.
Επιλογή καναλιού#
Επιλέξτε το ελαφρύτερο κανάλι που μεταφέρει αυτό που χρειάζεστε:
Ένα παιδί που εκτελεί μια εντολή - θέλετε την έξοδο της
sortή την είσοδο τουgzip. Χρησιμοποιήστε ένα άνοιγμα σωλήνα, ή ταIPC::Open2/IPC::Open3όταν χρειάζεστε και τις δύο κατευθύνσεις. Δείτε Υποδιεργασίες και συνεργαζόμενες διεργασίες.Δύο σχετιζόμενες διεργασίες, ένα μηχάνημα - ένας γονέας και ένα παιδί που μόλις δημιούργησε με fork, που μοιράζονται μια ροή bytes. Χρησιμοποιήστε
pipeήsocketpair. Δείτε Υποδιεργασίες και Υποδοχές UNIX-domain και UDP.Μη σχετιζόμενες διεργασίες, ένα μηχάνημα - δύο προγράμματα που ξεκίνησαν ανεξάρτητα και συναντιούνται σε μια γνωστή διαδρομή. Χρησιμοποιήστε ένα FIFO ή μια υποδοχή UNIX-domain. Δείτε FIFO και Υποδοχές UNIX-domain και UDP.
Διεργασίες σε διαφορετικά μηχανήματα - ένας πελάτης και ένας διακομιστής δικτύου. Χρησιμοποιήστε μια υποδοχή TCP. Δείτε Υποδοχές TCP.
Ένα datagram, ρίξε-και-ξέχνα - καμία σύνδεση, διατήρηση των ορίων μηνύματος. Χρησιμοποιήστε μια υποδοχή UDP. Δείτε Υποδοχές UNIX-domain και UDP.
Ένας κοινόχρηστος μετρητής ή ενταμιευτής χωρίς αντιγραφή - σηματοφόροι και κοινόχρηστη μνήμη System V. Χρησιμοποιήστε
semgetκαιshmget. Δείτε IPC System V.
Πώς είναι οργανωμένος αυτός ο οδηγός εκμάθησης#
Κάθε σελίδα στέκεται από μόνη της. Διαβάστε εκείνη που απαντά στην ερώτησή σας.
Υποδιεργασίες και συνεργαζόμενες διεργασίες - εκτέλεση μιας εντολής και επικοινωνία μαζί της, σε μία ή και στις δύο κατευθύνσεις, με το άνοιγμα σωλήνα και με τα
IPC::Open2/IPC::Open3.FIFO - ένας ονομασμένος σωλήνας στο σύστημα αρχείων που επιτρέπει σε δύο μη σχετιζόμενα προγράμματα να συναντηθούν σε μια διαδρομή.
Υποδοχές TCP - ένας πλήρης πελάτης και ένας διακομιστής echo που κάνει fork, πάνω από τη διεπαφή loopback.
Υποδοχές UNIX-domain και UDP - τοπικές υποδοχές ροής μέσω της
socketpair, και datagrams UDP χωρίς σύνδεση.IPC System V - σηματοφόροι και κοινόχρηστη μνήμη με τις χαμηλού επιπέδου ενσωματωμένες συναρτήσεις
semget/shmget.
Τι δεν καλύπτει αυτός ο οδηγός εκμάθησης#
Τα σήματα ως μηχανισμός συντονισμού πέρα από τα βασικά. Η αποστολή ενός σήματος με
killκαι η σύλληψή του μέσω του%SIGκαλύπτεται εκεί όπου τη χρειάζεται κάθε συνταγή· ο πλήρης πίνακας διάθεσης σημάτων βρίσκεται στην αναφορά%SIG.Παραλληλισμός εντός διεργασίας. Η εκτέλεση εργασίας σε πολλούς πυρήνες CPU μέσα σε ένα μόνο πρόγραμμα είναι αυτόματη παραλληλοποίηση, ένα διαφορετικό θέμα. Δείτε τον οδηγό Ταυτόχρονη εκτέλεση.
Αρθρώματα δικτύωσης υψηλού επιπέδου. Αυτός ο οδηγός εκμάθησης παραμένει στο επίπεδο της ενσωματωμένης
socketώστε οι μηχανισμοί να είναι ορατοί. Οι συνταγές είναι το θεμέλιο πάνω στο οποίο θα χτιζόταν ένα περιτύλιγμα υψηλότερου επιπέδου.