Das gleichzeitige Wachstum der Verfügbarkeit von Big Data und der Anzahl der gleichzeitigen Benutzer im Internet stellt einen besonderen Druck auf die Notwendigkeit dar, Rechenaufgaben „parallel“ oder gleichzeitig auszuführen. Paralleles und verteiltes Rechnen kommt in vielen verschiedenen Themenbereichen der Informatik vor, darunter Algorithmen, Computerarchitektur, Netzwerke, Betriebssysteme und Softwaretechnik. Zu Beginn des 21. Jahrhunderts gab es ein explosionsartiges Wachstum bei der Entwicklung von Multiprozessoren und anderen Strategien, mit denen komplexe Anwendungen schneller ausgeführt werden können. Paralleles und verteiltes Rechnen baut auf grundlegenden Systemkonzepten auf, wie Gleichzeitigkeit, gegenseitiger Ausschluss, Konsistenz bei der Zustands-/Speichermanipulation, Message-Passing und Shared-Memory-Modelle.
Die Erstellung eines Multiprozessors aus einer Reihe von Einzel-CPUs erfordert physikalische Verbindungen und einen Mechanismus für die Kommunikation zwischen den Prozessoren, damit diese parallel arbeiten können. Eng gekoppelte Multiprozessoren teilen sich den Speicher und können daher kommunizieren, indem sie Informationen in einem für alle Prozessoren zugänglichen Speicher ablegen. Lose gekoppelte Multiprozessoren, einschließlich Computernetzwerken, kommunizieren, indem sie sich gegenseitig Nachrichten über die physikalischen Verbindungen senden. Informatiker haben verschiedene Multiprozessor-Architekturen untersucht. So werden zum Beispiel die möglichen Konfigurationen untersucht, in denen Hunderte oder sogar Tausende von Prozessoren miteinander verbunden sind, um die Geometrie zu finden, die den effizientesten Systemdurchsatz unterstützt. Eine viel untersuchte Topologie ist der Hyperwürfel, bei dem jeder Prozessor direkt mit einer festen Anzahl von Nachbarn verbunden ist: zwei für das zweidimensionale Quadrat, drei für den dreidimensionalen Würfel und ähnlich für die höherdimensionalen Hyperwürfel. Informatiker erforschen auch Methoden zur Durchführung von Berechnungen auf solchen Multiprozessor-Maschinen (z. B. Algorithmen zur optimalen Ausnutzung der Architektur und Techniken zur Vermeidung von Konflikten bei der Datenübertragung). Die maschinenresidente Software, die die Nutzung einer bestimmten Maschine ermöglicht, insbesondere ihr Betriebssystem, ist ein integraler Bestandteil dieser Untersuchung.
Gleichzeitigkeit bezieht sich auf die Ausführung von mehr als einer Prozedur zur gleichen Zeit (vielleicht mit dem Zugriff auf gemeinsame Daten), entweder wirklich gleichzeitig (wie auf einem Multiprozessor) oder in einer unvorhersehbar verschachtelten Reihenfolge. Moderne Programmiersprachen wie Java enthalten sowohl Kapselung als auch „Threads“ genannte Funktionen, die es dem Programmierer ermöglichen, die Synchronisierung zwischen gleichzeitigen Prozeduren oder Tasks zu definieren.
Zwei wichtige Probleme bei der Steuerung der Gleichzeitigkeit sind als Deadlocks und Race Conditions bekannt. Deadlocks treten auf, wenn eine Ressource, die von einem Prozess auf unbestimmte Zeit gehalten wird, von zwei oder mehr anderen Prozessen gleichzeitig angefordert wird. Dies hat zur Folge, dass keiner der Prozesse, die die Ressource anfordern, fortfahren kann; sie sind in einer Sackgasse und warten darauf, dass die Ressource freigegeben wird. Ein Betriebssystem kann diese Situation mit verschiedenen Verhinderungs- oder Erkennungs- und Wiederherstellungstechniken behandeln. Eine Race Condition hingegen tritt auf, wenn zwei oder mehr gleichzeitige Prozesse einer Variablen einen unterschiedlichen Wert zuweisen und das Ergebnis davon abhängt, welcher Prozess die Variable zuerst (oder zuletzt) zuweist.
Die Vermeidung von Deadlocks und Race Conditions ist von grundlegender Bedeutung, da sie die Integrität der zugrunde liegenden Anwendung sicherstellt. Eine allgemeine Vermeidungsstrategie wird als Prozesssynchronisation bezeichnet. Die Synchronisierung erfordert, dass ein Prozess darauf wartet, dass ein anderer eine Operation abschließt, bevor er fortfährt. Zum Beispiel kann ein Prozess (ein Writer) Daten in einen bestimmten Hauptspeicherbereich schreiben, während ein anderer Prozess (ein Reader) Daten aus diesem Bereich lesen möchte. Der Leser und der Schreiber müssen synchronisiert werden, damit der Schreiber die vorhandenen Daten nicht überschreibt, bevor der Leser sie verarbeitet hat. Ebenso sollte der Leser nicht mit dem Lesen beginnen, bevor Daten in den Bereich geschrieben wurden.
Mit dem Aufkommen von Netzwerken wurde verteiltes Rechnen möglich. Eine verteilte Berechnung ist eine Berechnung, die von einer Gruppe miteinander verbundener Computer durchgeführt wird, die kooperativ arbeiten. Ein solches Rechnen erfordert normalerweise ein verteiltes Betriebssystem, um die verteilten Ressourcen zu verwalten. Wichtige Aspekte sind die Arbeitsteilung, bei der versucht wird, den Zugriff auf mehrere Computer zu nutzen, um Aufträge schneller abzuschließen; die Aufgabenmigration, die die Arbeitsteilung durch die effiziente Verteilung von Aufträgen auf Maschinen unterstützt; und die automatische Aufgabenreplikation, die an verschiedenen Standorten für eine höhere Zuverlässigkeit erfolgt.