Was ist eine Rennbedingung?

Inhalt

Laufstock

Hast du schon mal ein Rennen gefahren? Wenn ja, Sie wissen, dass manchmal ein fotografisches Finish erforderlich ist, um den Gewinner zu ermitteln! Aber, Was ist, wenn zwei Personen gleichzeitig die Ziellinie erreichen? Willkommen bei den Rennbedingungen.

Welche sind Computer-Threads?

Um eine Rennbedingung zu erklären, Zuerst müssen wir ein bisschen verstehen, wie Computer intern funktionieren. Bei Verwendung eines Betriebssystems, führt verschiedene Aktionen aus, wie das Öffnen eines Befehlsterminalfensters, öffne einen Browser, etc. Jede dieser Aktionen führt zu einer Reaktion des Betriebssystems, um einen neuen Computervorgang zu starten / Informatiker.

Ein Thread ist eine Computerprozedur / Computer, der läuft / wird die mehreren Schritte ausführen (Programmierschritte, ursprünglich im Quellcodeformat geschrieben und regelmäßig von einem Compiler kompiliert) erforderlich, um die von Ihnen angeforderte Aufgabe vom Betriebssystem oder der darauf ausgeführten Software auszuführen. .

Unter Linux, ein solcher Thread wird eindeutig durch a . identifiziert PID (Verfahrenskennung). Um mehr über PIDs in Linux zu erfahren, puede leer nuestros posts Grundlagen der Bash-Automatisierung und Skripterstellung (Teil 3) y Wie Linux-Signale funktionieren: UNTERSCHRIFT, SIGTERM und SIGKILL.

Unter Windows, ein Thread wird auch durch eine Prozedur-ID eindeutig identifiziert (Ref. PID Spalte im Windows Task-Manager), obwohl die Implementierung des Prozessmanagements zwischen Linux und Windows unterschiedlich ist; anderer Code dahinter, unterschiedlich PID Interaktionstools, etc. und eingeschränkte Kompatibilität. Zur selben Zeit, die Windows-Prozedur-ID PID nicht zu verwechseln mit Produkt-ID PID (gleicher Begriff, andere Bedeutung) Ö BEI (Anbieter-ID). Die letzten beiden beziehen sich auf die Geräteidentifikation und beziehen sich nicht auf das Prozessmanagement.

Wenn ein Thread beginnt, kann selbst andere Threads starten. Der ursprüngliche Thread wird oft als Haupt- oder Eltern-Thread bezeichnet. Als Beispiel, wenn Sie auf das Symbol Ihres bevorzugten Webbrowsers klicken, werde gleich einen Thread eröffnen (der Hauptthread), und dieser Thread startet sehr schnell mehrere untergeordnete Threads oder Threads und, da, wird zum Hauptthread.

Sie können sich Threads auch als Läufer in einem Rennen vorstellen. Als Beispiel, Stellen Sie sich einen ausgelasteten Datenbankserver vor, der viele verschiedene verbundene Clients bedient. Jeder dieser Client-Threads (Beachten Sie die Verwendung des Wortes Thread) werde haben (in mehreren Fällen) in und für sich mindestens einen Thread auf dem Datenbankhostserver und / oder innerhalb der Datenbanksoftware selbst (Mit anderen Worten, zwei Threads, eine im Betriebssystem registriert und eine in der Datenbanksoftware).

Der Datenbankserver versucht, alle diese Threads gleichzeitig zu bedienen, daher der Begriff gleichzeitige Prozesse Ö gleichzeitige Threads und wenn es Fehler in der Datenbanksoftware gibt (oder im Betriebssystem, usw.), früher oder später kann es sein, dass du dich in einer Rennbedingung wiederfindest.

Was ist ein Rennbedingung?

Eine einfache Möglichkeit, dies auf Läufer zu beziehen, die in einem Rennen laufen, besteht darin, sich ein Zielfoto vorzustellen, auf dem zwei Läufer tatsächlich zum gleichen Zeitpunkt die Ziellinie überqueren.. Ist machbar, auch wenn ziemlich unwahrscheinlich, dass dies bei Menschenrassen passiert. Für Computer, die Hunderte von Operationen pro Millisekunde verarbeiten, wird viel tragfähiger.

Als weiteres Beispiel, Stellen Sie sich einen Staffellauf vor, bei dem Läufer einen Staffelstab übergeben (der auffällige farbige Stock) von einer Person zur anderen. Stellen Sie sich jetzt vor, einer der Teilnehmer des Rennens macht einen Fehler, und jetzt gibt es zwei Läufer, die meinen, sie sollten die rote Flagge holen.

Ein wichtiges Ereignis bei einem Staffellauf ist die Übergabe des Staffelstabs, da dies bedeuten kann, dass der bisherige Inhaber des Tokens möglicherweise nicht mehr läuft, und jetzt liegt es an dem neuen Besitzer des Zeugen, sein Bestes zu geben. Jetzt schnappen sich zwei Läufer den Staffelstab. Es wird eine interessante Situation im Fernsehen zu sehen (wenn du sowas magst), aber es ist klar, dass es einige Konsequenzen geben wird.

Im Wesentlichen, eine Racebedingung ist ein Fehler, Fehler oder Panne im Computersystemcode, der zu unvorhersehbaren Ergebnissen führt: eine unerwartete Abfolge von Ereignissen. Es liegt regelmäßig daran, dass zwei Threads in irgendeiner Weise widersprüchlich sind, da mehr als zwei Threads am eigentlichen Konflikt beteiligt sein können und, häufig, mehr als zwei Threads in fehlerhafter Software laufen.

In unserem Beispiel der Menschheit, wir hatten zwei Personen, die ungefähr gleichzeitig auf ein Objekt zugegriffen haben, und der Korruption (eine Computerdefinition, um anzuzeigen, dass einige Daten beschädigt wurden, wo sich solche Daten im Speicher oder auf der Festplatte oder auf der CPU befinden könnten, usw.) es ist in dem Moment passiert, in dem zwei Leute (oder zwei Threads analog zum Computer) Sie versuchten, den Zeugen zu fassen, und der Konflikt trat auf. In rechnerischer Hinsicht, zwei Threads versuchten, einen Speicherplatz zu schreiben, der regelmäßig nur von einem Thread beschrieben werden sollte (ein Läufer).

Rennbedingungen können in verschiedenen Bereichen auftreten, wie interne Elektronik, Computersoftware und das Leben im Allgemeinen. Als Beispiel, eine Anrufkollision ist eine Telekommunikationsdefinition, um die Situation zu beschreiben, in der ein Kommunikationskanal an beiden Enden gleichzeitig belegt ist. Im Inneren der Computersoftware, einer der prominentesten Bereiche der Rennbedingungen, es gibt eine Vielzahl an möglichen Rennbedingungen.

Als weiteres Beispiel für eine Race Condition in der Computersoftware, Stellen Sie sich zwei Rechen-Threads vor, die mit einem bestimmten Speicherplatz arbeiten. Ein Benutzer hat gerade ein Formular gesendet und die Backend-Software schreibt dieses Formular in den Speicher. Zur selben Zeit, ein anderer Benutzer liest die Felder dieses Formulars aus dem gleichen Speicherplatz. Je nachdem was passiert, der Leser des Lesers erhält möglicherweise ein teilweise falsches Formular mit teilweise aktualisierten Informationen.

Verhinderung von Rennbedingungen: Fadensicherheit

Über Karrierebedingungen in der IT-Branche wurde viel diskutiert. Abhängig von der verwendeten Programmiersprache, Es kann viele oder wenige Bestimmungen geben, um mit Rennbedingungen umzugehen. Eine häufig verwendete Definition ist Fadensicherheit oder ein sicher vor Bedrohungen Anwendungs- oder Programmiersprache [konstruieren]. Diese Begriffe werden verwendet, um anzugeben, ob ein Stück Code oder Software als Ganzes sicher vor Bedrohungen, Mit anderen Worten, so geschrieben, dass Rennbedingungen vermieden oder sogar vermieden werden.

Wenn die Software berücksichtigt wird sicher vor Bedrohungen, gilt als frei von der Möglichkeit der Rennbedingungen. In verschiedenen Fällen, ‘betrachtet„Thread-safe ist das Beste, was Entwickler bieten können, und noch mehr, wenn viele Threads und Interaktionen möglich sind. Die Komplexität vieler Threads, die mit vielen Ressourcen arbeiten, kann leicht zu einer Vielzahl von Code-Handling und einer noch größeren Vielzahl möglicher Racebedingungen führen.

Verschiedene Programmierkonstrukte können verwendet werden, um Race-Conditions zu vermeiden. Als Beispiel, Ampel und Mutex. Die Komplexität der Verwendung solcher Konstrukte hängt von der verwendeten Programmiersprache und ihrer nativen Unterstützung zur Steuerung der Thread-Behandlung ab.. Als Beispiel, und C ++ das kann man sich anschauen std :: mutex Klasse zum Implementieren eines Mutex (Mit anderen Worten sich gegenseitig ausschließen) mit Schlüssel schließen. In bash, trotz dieses, so eine Konstruktion findet man nicht nativ.

Einen Schritt weiter gehen, zusätzlich können Sie sich überlegen, welche Konstruktionen, Funktionen oder auch ausführbare Dateien und insbesondere Bibliotheken sind bereits threadsicher, und später diese Konstruktionen verwenden, Funktionen, ausführbare Dateien und Bibliotheken als Grundlage für den Aufbau eines neuen Builds, Funktion, ausführbar, Bücherei. oder komplettes Softwarepaket.

Die Umsetzung selbst grundlegender Thread-Sicherheits-Handling-Konstrukte in die Praxis kann eine komplexe Angelegenheit sein.. Als Beispiel, bedenken Sie die Schwierigkeit der Implementierung eines Semaphors in bash.

Ende

In diesem Beitrag, Wir erforschen Computing-Threads und Race-Conditions. Wir analysieren Analogien zu Rennrennen und Staffelrennen im menschlichen Leben, um einige grundlegende Rennbedingungen zu untersuchen, die in Computern auftreten können.. Beenden, Wir erforschen die Fadensicherheit, die verschiedenen Implementierungen der Behandlung von Race-Conditions in Programmiersprachen und wie wir Race-Conditions verhindern können.

Wenn dir dieser Beitrag gefallen hat, schau dir den Beitrag an Wie Logikgatter funktionieren: ODER, UND, XOR, NOCH, NAND, XNOR und NICHT.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.