# Synchrone Kommunikation

Unter synchroner Kommunikation versteht man in der Informatik und Netzwerktechnik einen Modus der Kommunikation, bei dem die Kommunikationspartner (Prozesse) beim Senden oder beim Empfangen von Daten immer synchronisieren, also warten (blockieren), bis die Kommunikation abgeschlossen ist. Wird sowohl beim Senden als auch beim Empfangen gewartet (der Sender stellt also eine Anfrage und wartet auf Antwort), so entspricht das einem Rendezvous der beiden beteiligten Prozesse.
Das Blockieren des Prozesses wird intern durch geeignete Mechanismen zur Prozesssynchronisation erreicht. Damit geht die Synchronisierung über die reine Transaktionsorientierung hinaus. Das Senden und Empfangen von Daten ohne Blockieren des Prozesses bezeichnet man als Asynchrone Kommunikation. Auch diese lässt einen transaktionsorientierten Betrieb zu.
Die synchrone Kommunikation sollte nicht mit dem Begriff der synchronen Datenübertragung verwechselt werden, der sich auf Medienzugriffsverfahren bezieht.

## Synchroner Empfangsmodus

Das Warten auf den Empfang (blockierender Empfang) von Daten nennt man auch „blocking read“ oder „synchronous receive“. Es entspricht dem Verhalten eines Konsumenten einer Warteschlange bzw. dem Verhalten eines Prozessors eines Datenstroms: Der Prozess besteht im Wesentlichen aus einer Schleife, die wartet, bis Daten vorhanden sind, diese verarbeitet und dann wieder wartet. Die Verarbeitung der empfangenen Daten kann auch darin bestehen, dass Behandlungsroutinen für bestimmte Arten von Daten aufgerufen werden. Das entspricht der Semantik einer Ereignisbehandlung.
Beim nicht-blockierenden Empfang („non-blocking read“, „asynchronous receive“) gibt dagegen der Befehl zum Empfang von Daten einfach einen Fehler zurück, wenn keine Daten im Eingangspuffer liegen. Der Prozess würde dann einfach in regelmäßigen Abständen prüfen, ob Daten vorliegen, und sich sonst anderen Aufgaben widmen (zum Beispiel der Kommunikation mit einem dritten Prozess).
Ein weiterer Modus zum Empfang von Daten sind Guarded Statements nach Leslie Lamport: Hier wartet der Empfänger nicht auf Daten von einem bestimmten, sondern von irgendeinem Datenstrom, so dass ein einzelner Prozess mehrere Datenströme parallel bedienen kann. Der Empfang ist dann synchron in Bezug auf ein „Bündel“ von anderen Prozessen, nicht in Bezug auf einen einzelnen Prozess. Diese Technik wird vor allem in Servern verwendet.

## Synchrone Anfrage

Häufig werden Daten im Sinne einer Anfrage übertragen (Client-Server-System), auf die sofort eine Antwort erwartet wird. In diesem Fall sendet der Client-Prozess eine Anfrage und wartet (blockiert) so lange, bis eine Antwort vom Server kommt – man spricht auch von eng gekoppelten Prozessen oder Rendezvous-Semantik. Das Ausbleiben einer Antwort wird dann nach einer gewissen Zeit (Timeout) als Fehler betrachtet. Häufig wird jedoch einige Male eine erneute Übertragung der Anfrage versucht (retry), bevor endgültig ein Fehler gemeldet wird, besonders wenn der zugrundeliegende Kanal unzuverlässig ist.
Diese Semantik wird von den gängigen Client-Server-Protokollen verwendet, und für den direkten Funktionsaufruf in anderen Prozessen (Remote Procedure Call). Wird als Antwort einer Anfrage nur eine Bestätigung erwartet, so kann man den Ablauf als ein einfaches blockierendes Versenden betrachten.
Eine Alternative zu der synchronen Aufrufsemantik wäre es, gar keine Antwort zu erwarten. Dabei hängt es von der zugrundeliegenden Netzwerkschicht ab, ob sichergestellt ist, dass der Empfänger die Daten tatsächlich erhalten hat. Im Allgemeinen ist diese Sicherheit aber nicht gegeben, besonders nicht bei einer Übertragung über ein Netzwerk.
Eine weitere Möglichkeit ist die asynchrone Anfrage: Nach dem Versenden einer Nachricht arbeitet der Prozess zunächst weiter und prüft (möglicherweise neben anderen Tätigkeiten) immer wieder, ob Nachrichten von anderen Prozessen eingegangen sind. Diese Nachrichten werden dann bearbeitet, es wird nicht zwischen „Anfragen“ und „Antworten“ unterschieden. Dies nennt man auch eine lose Kopplung der Prozesse.

## Kommunikation zwischen ICs

Bei der Kommunikation zwischen verschiedenen Chips spricht man von synchroner Kommunikation, wenn ein Clock-Signal benutzt wird, um Sender und Empfängersignal miteinander zu synchronisieren (um ein Auseinanderdriften in die Asynchronität zu vermeiden).
Das Auseinanderdriften von Signalen kann auch über andere Strategien verhindert werden (z. B. Bitstuffing); dies wird aber meist bei asynchroner Kommunikation eingesetzt.

## Beispiele für synchrone Kommunikationsvarianten

* RMI
* RPC
* http

## Beispiele für synchrone Kommunikation zwischen Personen

Zur synchronen Kommunikation zählen z. B. folgende Kommunikationsformen bzw. -techniken:
* herkömmliche Telefonie (bspw. Mobilfunk, Festnetz). In der IP-Telefonie kann bereits Asynchronität eintreten (bei geringer Qualität des Dienstes, QoS).
* Instant Messaging
* IRC-Chats
* Web-Chats
* Internet-Videokonferenzen