Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Welche Methoden der prozessübergreifenden Kommunikation gibt es unter Linux?

Welche Methoden der prozessübergreifenden Kommunikation gibt es unter Linux?

王林
王林Original
2020-06-29 13:16:397062Durchsuche

Die Kommunikationsmethoden zwischen Linux-Prozessen umfassen: 1. Pipes (einschließlich anonymer Pipes und benannter Pipes); Der Kern der Pipe ist ein Kernelpuffer, und der Prozess verwendet die Pipe zum Übertragen von Informationen.

Welche Methoden der prozessübergreifenden Kommunikation gibt es unter Linux?

Linux-Interprozess-Kommunikationsmethode:

(empfohlenes Lernen: Linux-Tutorial)

Zu den grundlegenden Kommunikationsmethoden zwischen Linux-Prozessen gehören hauptsächlich: Pipes (einschließlich anonymer Pipes und benannter Pipes), Signale, Nachrichtenwarteschlangen, gemeinsam genutzter Speicher, Semaphore und Sockets.

Die folgenden Methoden werden jeweils vorgestellt:

1. Pipe

Die Essenz der Pipe ist ein Kernelpuffer schlägt vor, dass sich die beiden Prozesse, die kommunizieren müssen, an beiden Enden der Pipe befinden und die Prozesse die Pipe zum Übertragen von Informationen verwenden. Für die Prozesse an beiden Enden der Pipe ist eine Pipe eine Datei, aber diese Datei ist etwas Besonderes. Sie gehört nicht zum Dateisystem und existiert nur im Speicher.

2. Signal

Signal ist eine Simulation des Interrupt-Mechanismus auf Softwareebene. Es handelt sich um eine asynchrone Kommunikationsmethode Signal durch irgendeine Operation ankommen. Signale können direkt zwischen User-Space-Prozessen und dem Kernel interagieren, und der Kernel kann Signale verwenden, um User-Space-Prozesse darüber zu informieren, welche Systemereignisse aufgetreten sind.

3. Nachrichtenwarteschlange

Die Nachrichtenwarteschlange ist eine verknüpfte Liste von Nachrichten mit einem bestimmten Format, die im Speicher gespeichert und durch die Nachrichtenwarteschlangen-ID identifiziert wird Ein oder mehrere Prozesse schreiben und lesen Nachrichten darauf

4. Gemeinsamer Speicher

ermöglicht mehreren Prozessen das direkte Lesen und Schreiben desselben Speicherbereichs, der für andere Kommunikation vorgesehen ist Mechanismen sind darauf ausgelegt, ineffizient zu funktionieren.

Um Informationen zwischen mehreren Prozessen auszutauschen, reserviert der Kernel speziell einen Speicherbereich, der von dem Prozess, der darauf zugreifen muss, seinem eigenen privaten Adressraum zugeordnet werden kann. Der Prozess kann diesen Speicher direkt lesen und schreiben, ohne die Daten zu kopieren, wodurch die Effizienz erheblich verbessert wird.

Hinweis: Der gemeinsam genutzte Speicher bietet keinen Synchronisierungsmechanismus, bevor ein Prozess das Schreiben in den gemeinsam genutzten Speicher beendet. Es gibt keinen automatischen Mechanismus, der verhindert, dass andere zwei Prozesse mit dem Lesen beginnen. Daher müssen wir normalerweise andere Mechanismen verwenden, um den Zugriff auf den gemeinsam genutzten Speicher zu synchronisieren.

5. Semaphor

Ein Semaphor ist im Wesentlichen ein Zähler, der die Anzahl der verfügbaren Ressourcen identifiziert, und sein Wert ist immer eine nicht negative ganze Zahl. Semaphore mit nur zwei Werten 0 und 1 werden als binäre Semaphore (oder binäre Semaphore) bezeichnet und können verwendet werden, um festzustellen, ob eine bestimmte Ressource verfügbar ist.

6. Sockets

Sockets sind ein grundlegenderer Mechanismus für die Kommunikation zwischen Prozessen.

Es gibt zwei Arten von Sockets: dateibasiert und netzwerkorientiert.

(1) Unix-Sockets sind dateibasiert und haben einen „Familiennamen“ – AF_UNIX, der die Adressfamilie darstellt: UNIX.

(2) Der zweite Socket-Typ basiert auf dem Netzwerk. Er hat auch einen eigenen Familiennamen – AF_INET, der die Adressfamilie darstellt: INTERNET

Egal welche Adresse verwendet wird Familien verfügen alle über zwei verschiedene Arten von Socket-Verbindungen: verbindungsorientiert und verbindungslos.

(1) Verbindungsorientierter Socket (SOCK_STREAM)

Eine Verbindung muss hergestellt werden, bevor die Kommunikation eine serialisierte, zuverlässige und nicht duplizierte Datenübermittlung ermöglicht. Es gibt keine Datensatzgrenzen .

Das bedeutet, dass jede Information in mehrere Teile aufgeteilt werden kann und jedes Teil garantiert sein Ziel erreicht, wo die Informationen dann wieder zusammengefügt werden können.

Das Hauptprotokoll, das diese Art von Verbindung implementiert, ist das Transmission Control Protocol (TCP).

(2) Verbindungsloser Socket (SOCK_DGRAM)

Es ist nicht erforderlich, vor Beginn der Kommunikation eine Verbindung herzustellen, und deren Reihenfolge, Zuverlässigkeit oder Wiederholbarkeit können während der Datenübertragung nicht garantiert werden.

Datagramme behalten jedoch die Datensatzgrenzen bei, was bedeutet, dass die Nachricht als Ganzes gesendet wird und nicht zunächst in Fragmente zerlegt wird.

Aufgrund der Garantien, die verbindungsorientierte Sockets bieten, erfordert deren Einrichtung und Wartung von Virtual-Circuit-Verbindungen einen erheblichen Overhead. Allerdings erfordern Datagramme diesen Overhead nicht, d. h. sie sind „billiger“.

Das Hauptprotokoll, das diesen Verbindungstyp implementiert, ist User Datagram Protocol (UDP).

Das obige ist der detaillierte Inhalt vonWelche Methoden der prozessübergreifenden Kommunikation gibt es unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn