Nachrichtenübergang

Im Informatik, Nachrichtenübergang ist eine Technik zum Anrufen von Verhalten Programm) auf einen Computer. Das aufgerufene Programm sendet eine Nachricht an a Prozess (was kann ein sein Schauspieler oder Objekt) und stützt sich auf diesen Prozess und seine unterstützende Infrastruktur, um dann einen geeigneten Code auszuwählen und auszuführen. Das Passieren von Nachrichten unterscheidet sich von herkömmlicher Programmierung, wo ein Prozess, Subroutineoder Funktion wird direkt mit Namen aufgerufen. Die Nachricht zum Nachrichten ist der Schlüssel zu einigen Modelle der Parallelität und Objekt orientierte Programmierung.

Das Passieren von Nachrichten ist im modernen Computer allgegenwärtig Software. Es wird als eine Möglichkeit für die Objekte verwendet, aus denen ein Programm miteinander funktioniert, und als Mittel für Objekte und Systeme, die auf verschiedenen Computern ausgeführt werden (z. B. die, die Internet) interagieren. Die Verabschiedung von Nachrichten kann durch verschiedene Mechanismen implementiert werden, einschließlich Kanäle.

Überblick

Das Passieren von Nachrichten ist eine Technik zum Aufrufen von Verhaltensweisen (d. H. Ein Programm) auf einem Computer. Im Gegensatz zu der traditionellen Technik, ein Programm mit dem Namen aufzurufen Objektmodell Unterscheidung der allgemeinen Funktion von den spezifischen Implementierungen. Das aufgerufene Programm sendet eine Nachricht und stützt sich auf das Objekt, um den entsprechenden Code auszuwählen und auszuführen. Die Begründung für die Verwendung einer Zwischenschicht fällt im Wesentlichen in zwei Kategorien: Kapselung und Verteilung.

Verkapselung ist die Idee, dass Softwareobjekte in der Lage sein sollten, Dienste für andere Objekte aufzurufen, ohne zu wissen oder sich darüber zu kümmern, wie diese Dienste implementiert werden. Die Kapselung kann die Menge an Codierungslogik verringern und die Systeme aufrechterhalten. Anstatt wenn sie Anweisungen haben, die bestimmen, welche Unterprogramme oder Funktionen ein Entwickler aufrufen können, kann sie einfach eine Nachricht an das Objekt senden, und das Objekt wählt den entsprechenden Code basierend auf seinem Typ aus.

Eines der ersten Beispiele dafür, wie dies verwendet werden kann, war in der Domäne der Computergrafik. Es gibt verschiedene Komplexitäten, die an der Manipulation von Grafikobjekten verbunden sind. Beispielsweise variiert einfach die rechte Formel zur Berechnung des Bereichs einer geschlossenen Form ab, je nachdem, ob die Form ein Dreieck, Rechteck, Ellipse oder Kreis ist. In der herkömmlichen Computerprogrammierung würde dies zu langen If-then-Angaben führen, die testen, welche Art von Objekt die Form war und den entsprechenden Code aufgerufen wurde. Die objektorientierte Art, dies zu behandeln, besteht darin, eine Klasse genannt zu definieren Form mit Unterklassen wie z. Rechteck und Ellipse (was wiederum Unterklassen haben Quadrat und Kreis) und dann einfach eine Nachricht an eine beliebige Sendung zu Form Bitten Sie es, seinen Bereich zu berechnen. Jeder Form Das Objekt wird dann die Methode der Subklasse mit der für diese Art von Objekt geeigneten Formel aufrufen.[1]

Die verteilte Nachrichtenübergabe bietet Entwicklern eine Ebene der Architektur, die gemeinsame Dienste zum Erstellen von Systemen aus Subsystemen bietet, die auf unterschiedlichen Computern an verschiedenen Orten und zu unterschiedlichen Zeiten ausgeführt werden. Wenn ein verteiltes Objekt eine Nachricht sendet, kann sich die Messaging -Ebene um Probleme kümmern, wie z. B.:

  • Finden des Prozesses mit unterschiedlichen Betriebssystemen und Programmiersprachen an verschiedenen Orten, von denen die Nachricht entstanden ist.
  • Speichern Sie die Nachricht in einer Warteschlange Wenn das entsprechende Objekt zur Verarbeitung der Nachricht derzeit nicht ausgeführt wird, und dann die Nachricht aufrufen, wenn das Objekt verfügbar ist. Speichern Sie das Ergebnis bei Bedarf auch, bis das Sendungsobjekt bereit ist, es zu empfangen.
  • Kontrolle verschiedener Transaktionsanforderungen für verteilte Transaktionen, z. Atomizität, Konsistenz, Isolation, Haltbarkeit (SÄURE) Testen der Daten.[2]

Synchroner versus asynchroner Nachrichtenübergang

Synchrone Nachricht Passierung

Synchrones Nachrichtenübergang tritt zwischen Objekten auf, die gleichzeitig ausgeführt werden. Es wird von objektorientierten Programmiersprachen verwendet, wie z. Java und Smalltalk.

Synchrones Messaging ist analog zu einem synchronen Funktionsaufruf. So wie der Funktionsanrufer bis zur Fertigstellung wartet, wartet der Sendungsvorgang bis zum Abschluss des Empfangsprozesses. Dies kann für einige Anwendungen synchrone Kommunikation nicht verarbeitet werden. Zum Beispiel können große, verteilte Systeme nicht gut genug funktionieren, um nutzbar zu sein. Solch große, verteilte Systeme müssen möglicherweise operieren, während einige ihrer Subsysteme für die Wartung usw. sind.

Stellen Sie sich ein geschäftiges Geschäftsbüro mit 100 Desktop -Computern vor, die E -Mails aneinander senden, indem synchrone Nachrichten exklusiv bestehen. Ein Mitarbeiter, der seinen Computer ausschaltet, kann dazu führen, dass die anderen 99 Computer einfrieren, bis der Arbeiter seinen Computer wieder einschaltet, um eine einzige E -Mail zu verarbeiten.

Asynchrone Nachricht passieren

Wenn asynchrone Nachricht das empfangende Objekt übergeben kann, kann es nach unten oder beschäftigt sein, wenn das anforderende Objekt die Nachricht sendet. Wenn Sie die Funktionsaufrufanalogie fortsetzen, ist es wie ein Funktionsaufruf, der sofort zurückgibt, ohne auf die Ausgabe der aufgerufenen Funktion zu warten. Nachrichten werden an eine Warteschlange gesendet, in der sie gespeichert werden, bis der Empfangsprozess sie anfordert. Der Empfangsprozess verarbeitet seine Nachrichten und sendet Ergebnisse an eine Warteschlange für die Abholung durch den ursprünglichen Prozess (oder einen bestimmten nächsten Prozess).[3]

Asynchrone Messaging erfordert zusätzliche Funktionen für die Speicherung und Wiedervermittlung von Daten für Systeme, die möglicherweise nicht gleichzeitig ausgeführt werden und im Allgemeinen von einem Vermittlerniveau der Software gehandhabt werden (häufig genannt Middleware); Ein gängiger Typ ist meldungsorientierte Middleware (MOM).

Der in der asynchrone Kommunikation erforderliche Puffer kann Probleme verursachen, wenn er voll ist. Es muss eine Entscheidung getroffen werden, ob der Absender blockiert oder zukünftige Nachrichten verurteilt werden soll. Ein blockierter Absender kann dazu führen Sackgasse. Wenn Nachrichten fallen gelassen werden, ist die Kommunikation nicht mehr zuverlässig.

Hybriden

Die synchrone Kommunikation kann auf der asynchronen Kommunikation mit a aufgebaut werden Synchronisator. Zum Beispiel arbeitet der α-Synchronizer, indem er sicherstellt, dass der Absender immer auf eine Bestätigungsnachricht vom Empfänger wartet. Der Absender sendet erst nach Eingang der Bestätigung die nächste Nachricht. Andererseits kann auch eine asynchrone Kommunikation auf der synchronen Kommunikation aufgebaut werden. Zum Beispiel modern Mikrokernel im Allgemeinen nur a Synchrone Messaging Primitive und asynchrone Messaging kann oben mit Verwendung implementiert werden Helferfäden.

Verteilte Objekte

Nachrichten-Passing-Systeme verwenden entweder verteilte oder lokale Objekte. Mit verteilten Objekten kann sich der Absender und der Empfänger auf verschiedenen Computern befinden und verschiedene Betriebssysteme ausführen, verschiedene Programmiersprachen verwenden usw. Netzwerk usw. die Remote -Verfahrensanruf (RPC) -Protokoll in Unix war ein frühes Beispiel dafür. Beachten Sie, dass es bei dieser Art von Nachrichtenübergabe keine Anforderung ist, dass der Absender oder der Empfänger eine objektorientierte Programmierung verwenden. Verfahrenssprachige Systeme können als große körnige Objekte eingewickelt und behandelt werden, die Nachrichten senden und empfangen können.[4]

Beispiele für Systeme, die verteilte Objekte unterstützen, sind: Smaragd, ONC RPC, Corba, Java RMI, DCOM, SEIFE, .NET Remoting, CTOs, Qnx Neutrino rtos, OpenBinder und D-Bus. Distributed -Objektsysteme wurden als "Shared Nothing" -Systeme bezeichnet, da die Nachrichtenübergabe die zugrunde liegenden Zustandsänderungen verbirgt, die bei der Implementierung von Nachrichten verwendet werden können.


Verteilte oder asynchrone Nachrichtenüberschreitungen haben im Vergleich zum Aufrufen eines Prozedur einen zusätzlichen Overhead. Beim Nachrichten-Passing müssen Argumente in die neue Nachricht kopiert werden. Einige Argumente können Megabyte von Daten enthalten, die alle kopiert und an das empfangende Objekt übertragen werden müssen.

Traditionell Verfahrensanrufe unterscheiden sich von Nachrichtenüberwachung in Bezug auf die Speicherverwendung, Transferzeit und Ort. Argumente werden typischerweise an den Empfänger übergeben Allgemeine Register weder zusätzlicher Speicher noch Übertragungszeit oder in a Parameter Liste mit den Adressen der Argumente (einige Bits). Für verteilte Systeme ist das Adressverfahren nicht möglich, da die Systeme separate Adressräume verwenden.

Netz Browser und Webserver sind Beispiele für Prozesse, die durch Nachrichtenübergang kommunizieren. EIN URL ist ein Beispiel für die Referenzierung einer Ressource, ohne Prozessintern zu enthüllen.

A Subroutine Rufen Sie an oder Methode Der Anruf wird erst beendet, wenn die aufgerufene Berechnung beendet wurde. Im Gegensatz dazu kann asynchrone Nachrichten-Passagen zu einer Antwort führen, die nach Sendungsnachricht zu einer erheblichen Zeit eintritt.

Ein Nachrichtenhandler wird im Allgemeinen verarbeiten [5]Nachrichten von mehr als einem Absender. Dies bedeutet, dass sich sein Zustand aus Gründen ändern kann, die nicht mit dem Verhalten eines einzelnen Absendungs- oder Kundenprozesses zu tun haben. Dies steht im Gegensatz zu dem typischen Verhalten eines Objekts, auf das Methoden aufgerufen werden: Letzteres wird voraussichtlich zwischen Methodenaufrufe im selben Zustand bleiben. Mit anderen Worten, der Nachrichtenhandler verhält sich analog zu a flüchtiges Objekt.

Mathematische Modelle

Die prominenten mathematischen Modelle des Nachrichtenübergangs sind die Schauspielermodell und PI -Kalkül.[6][7] In mathematischer Begriffen ist eine Nachricht das einzelne Mittel, um die Kontrolle an ein Objekt zu übergeben. Wenn das Objekt auf die Nachricht antwortet, hat es a Methode für diese Nachricht.

Alan Kay hat argumentiert, dass das Bestehen von Nachrichten wichtiger ist als Objekte in OOP, und dass Objekte selbst oft überbetont werden. Das Live verteilte Objekte Programmiermodell baut auf dieser Beobachtung auf; Es verwendet das Konzept von a Verteilter Datenfluss Um das Verhalten eines komplexen verteilten Systems in Bezug auf Nachrichtenmuster unter Verwendung von Spezifikationen im funktionalen Stil zu charakterisieren.[8]

Beispiele

Siehe auch

Verweise

  1. ^ Goldberg, Adele; David Robson (1989). Smalltalk-80 die Sprache. Addison Wesley. S. 5–16. ISBN 0-201-13688-0.
  2. ^ Orfali, Robert (1996). Der wesentliche Client/Server -Überlebenshandbuch. New York: Wiley Computer Publishing. pp.1–22. ISBN 0-471-15325-7.
  3. ^ Orfali, Robert (1996). Der wesentliche Client/Server -Überlebenshandbuch. New York: Wiley Computer Publishing. pp.95–133. ISBN 0-471-15325-7.
  4. ^ Orfali, Robert (1996). Der wesentliche Client/Server -Überlebenshandbuch. New York: Wiley Computer Publishing. pp.375–397. ISBN 0-471-15325-7.
  5. ^ "Prozess der Ausblenden von Nachrichten". Nachricht. 2022-04-13. Abgerufen 2022-04-12.
  6. ^ Milner, Robin (Januar 1993). "Elemente der Interaktion: Turing Award Lecture". Kommunikation der ACM. 36 (1): 78–89. doi:10.1145/151233.151240.
  7. ^ Carl Hewitt; Peter Bishop; Richard Steiger (1973). "Ein universeller modularer Schauspieler -Formalismus für künstliche Intelligenz". Ijcai. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  8. ^ Kay, Alan. "Prototypen gegen Klassen war: Re: Sun's Hotspot". lists.squeakfoundation.org. Abgerufen 2. Januar 2014.
  9. ^ "Verwenden von Nachrichten, die zum Übertragen von Daten zwischen Threads - der Rost -Programmiersprache - übertragen werden". Rost-Lang.org.

Weitere Lektüre

Externe Links