# Επικοινωνία μεταξύ διεργασιών - ένας οδηγός εκμάθησης Δύο προγράμματα που χρειάζεται να επικοινωνήσουν έχουν μια χούφτα κανάλια να επιλέξουν: έναν σωλήνα, ένα ονομασμένο FIFO στον δίσκο, μια υποδοχή πάνω από το δίκτυο, ένα ζεύγος υποδοχών στη μνήμη ή ένα κομμάτι κοινόχρηστης μνήμης System V. Αυτός ο οδηγός εκμάθησης είναι ένα βιβλίο συνταγών. Κάθε σελίδα σας δίνει ένα πλήρες, εκτελέσιμο πρόγραμμα - έναν παραγωγό και έναν καταναλωτή, ή έναν πελάτη και έναν διακομιστή - που μπορείτε να αντιγράψετε, να εκτελέσετε και να προσαρμόσετε. Οι μηχανισμοί κάθε καναλιού - τι επιστρέφει η [`socket`](../../p5/core/perlfunc/socket.md), πώς η [`fork`](../../p5/core/perlfunc/fork.md) διασπά μια διεργασία, τι κάνει το `%SIG` - τεκμηριώνονται ήδη στην αναφορά ανά ενσωματωμένη συνάρτηση και στο κεφάλαιο των σημάτων. Αυτός ο οδηγός εκμάθησης δεν τα επαναλαμβάνει. Τα συναρμολογεί σε λειτουργικά προγράμματα IPC και συνδέει κάθε κλήση πίσω στη σελίδα αναφοράς της. Η PetaPerl τρέχει μόνο σε Linux, οπότε όλα εδώ είναι POSIX. Δεν υπάρχει IPC Win32, ούτε εναλλακτική ονομασμένου σωλήνα σε Windows, ούτε `Win32::Process`. Οι συνταγές χρησιμοποιούν τις κλήσεις συστήματος που πραγματικά παρέχει ένας πυρήνας Linux. ## Επιλογή καναλιού Επιλέξτε το ελαφρύτερο κανάλι που μεταφέρει αυτό που χρειάζεστε: - **Ένα παιδί που εκτελεί μια εντολή** - θέλετε την έξοδο της `sort` ή την είσοδο του `gzip`. Χρησιμοποιήστε ένα [άνοιγμα σωλήνα](../io-streams/pipes.md), ή τα `IPC::Open2` / `IPC::Open3` όταν χρειάζεστε και τις δύο κατευθύνσεις. Δείτε [Υποδιεργασίες και συνεργαζόμενες διεργασίες](subprocesses.md). - **Δύο σχετιζόμενες διεργασίες, ένα μηχάνημα** - ένας γονέας και ένα παιδί που μόλις δημιούργησε με fork, που μοιράζονται μια ροή bytes. Χρησιμοποιήστε [`pipe`](../../p5/core/perlfunc/pipe.md) ή [`socketpair`](../../p5/core/perlfunc/socketpair.md). Δείτε [Υποδιεργασίες](subprocesses.md) και [Υποδοχές UNIX-domain και UDP](sockets-unix-udp.md). - **Μη σχετιζόμενες διεργασίες, ένα μηχάνημα** - δύο προγράμματα που ξεκίνησαν ανεξάρτητα και συναντιούνται σε μια γνωστή διαδρομή. Χρησιμοποιήστε ένα [FIFO](fifos.md) ή μια υποδοχή UNIX-domain. Δείτε [FIFO](fifos.md) και [Υποδοχές UNIX-domain και UDP](sockets-unix-udp.md). - **Διεργασίες σε διαφορετικά μηχανήματα** - ένας πελάτης και ένας διακομιστής δικτύου. Χρησιμοποιήστε μια υποδοχή TCP. Δείτε [Υποδοχές TCP](sockets-tcp.md). - **Ένα datagram, ρίξε-και-ξέχνα** - καμία σύνδεση, διατήρηση των ορίων μηνύματος. Χρησιμοποιήστε μια υποδοχή UDP. Δείτε [Υποδοχές UNIX-domain και UDP](sockets-unix-udp.md). - **Ένας κοινόχρηστος μετρητής ή ενταμιευτής χωρίς αντιγραφή** - σηματοφόροι και κοινόχρηστη μνήμη System V. Χρησιμοποιήστε [`semget`](../../p5/core/perlfunc/semget.md) και [`shmget`](../../p5/core/perlfunc/shmget.md). Δείτε [IPC System V](sysv-ipc.md). ## Πώς είναι οργανωμένος αυτός ο οδηγός εκμάθησης Κάθε σελίδα στέκεται από μόνη της. Διαβάστε εκείνη που απαντά στην ερώτησή σας. * [Υποδιεργασίες και συνεργαζόμενες διεργασίες](subprocesses.md) * [FIFO](fifos.md) * [Υποδοχές TCP](sockets-tcp.md) * [Υποδοχές UNIX-domain και UDP](sockets-unix-udp.md) * [IPC System V](sysv-ipc.md) - **Υποδιεργασίες και συνεργαζόμενες διεργασίες** - εκτέλεση μιας εντολής και επικοινωνία μαζί της, σε μία ή και στις δύο κατευθύνσεις, με το άνοιγμα σωλήνα και με τα `IPC::Open2` / `IPC::Open3`. - **FIFO** - ένας ονομασμένος σωλήνας στο σύστημα αρχείων που επιτρέπει σε δύο μη σχετιζόμενα προγράμματα να συναντηθούν σε μια διαδρομή. - **Υποδοχές TCP** - ένας πλήρης πελάτης και ένας διακομιστής echo που κάνει fork, πάνω από τη διεπαφή loopback. - **Υποδοχές UNIX-domain και UDP** - τοπικές υποδοχές ροής μέσω της [`socketpair`](../../p5/core/perlfunc/socketpair.md), και datagrams UDP χωρίς σύνδεση. - **IPC System V** - σηματοφόροι και κοινόχρηστη μνήμη με τις χαμηλού επιπέδου ενσωματωμένες συναρτήσεις [`semget`](../../p5/core/perlfunc/semget.md) / [`shmget`](../../p5/core/perlfunc/shmget.md). ## Τι δεν καλύπτει αυτός ο οδηγός εκμάθησης - **Τα σήματα ως μηχανισμός συντονισμού πέρα από τα βασικά.** Η αποστολή ενός σήματος με [`kill`](../../p5/core/perlfunc/kill.md) και η σύλληψή του μέσω του `%SIG` καλύπτεται εκεί όπου τη χρειάζεται κάθε συνταγή· ο πλήρης πίνακας διάθεσης σημάτων βρίσκεται στην αναφορά [`%SIG`](../../p5/core/perlvar/signals.md). - **Παραλληλισμός εντός διεργασίας.** Η εκτέλεση εργασίας σε πολλούς πυρήνες CPU μέσα σε ένα μόνο πρόγραμμα είναι αυτόματη παραλληλοποίηση, ένα διαφορετικό θέμα. Δείτε τον οδηγό [Ταυτόχρονη εκτέλεση](../../guide/concurrent-execution/index.md). - **Αρθρώματα δικτύωσης υψηλού επιπέδου.** Αυτός ο οδηγός εκμάθησης παραμένει στο επίπεδο της ενσωματωμένης `socket` ώστε οι μηχανισμοί να είναι ορατοί. Οι συνταγές είναι το θεμέλιο πάνω στο οποίο θα χτιζόταν ένα περιτύλιγμα υψηλότερου επιπέδου.