Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03514.jsonl.gz/1679

Ein Bloom-Filter kann man einsetzen, wenn schnell überprüfbar sein muss, ob ein Wert nicht vorhanden ist. Man kann zum Beispiel verschiedene Wörter im Bloom-Filter speichern und schnell überprüfen, ob die Eingabe einem Wort im Filter entspricht. Der Vorteil vom Bloom-Filter ist der geringe Speicherplatz und die Geschwindigkeit. Ein Nachteil ist, dass man mithilfe des Bloom-Filters nicht sagen kann, ob der Wert vorhanden ist.
Mittlerweile gibt es einige verteile Systeme. Die Blockchain-Technologien sind nur die Neusten. Es gibt zum Beispiel noch:
Ich werde einige als Prüfungsvorbereitung beschreiben. Viel Material kann man auf der Website von Maarten van Steen finden.
Die Threads selbst zu verwalten ist nicht immer nötig und für kleinere Aufgaben auch oft zu teuer. Es gibt in Java den so genannten Thread Pool, dem man Aufgaben übergeben kann. Diese Aufgaben werden ausgeführt und man erhält sofort einen
Future<Ergebnis> zurück. Dieser Future enthält dann irgendwann das Ergebnis der Aufgabe oder “null”, falls kein Ergebnis gewünscht wurde.
Wenn mehrere Prozesse beispielsweise eine Variable lesen und schreiben, können durch unterschiedliches Timing falsche Zustände entstehen. Am Einfachsten kann man es sich mit einem Bankkonto veranschaulichen. Ein Thread erhöht jeweils den Kontostand um 10 und ein anderer Thread reduziert den Kontostand um 10. Damit man den Kontostand um 10 verändern kann, muss man den Kontostand natürlich zuerst wissen. Es könnte also zum Beispiel folgendes passieren:
Der obige Ablauf ist möglich, weil das Betriebssystem entscheidet, wann und wie lange ein Thread laufen darf. Wenn nur eine fehlerhaften Reihenfolge möglich ist, kann es zu Fehlern kommen, aber leider nicht bei jeder Programmdurchführung. Das macht das Testen und das Debuggen schwer.
Race Condition gibt es sobald man den Zugriff auf gemeinsame Ressourcen (Variablen oder ähnliches) nicht genügend synchronisiert. Anders ausgedrückt hat man eine Race Condition, wenn die Ausführung nicht immer zu einem gültigen Zustand kommt. Man könnte auch sagen, dass aufgrund der Race-Condition je nach Thread-Scheduling andere Ergebnisse bei gleichem Code generiert werden.
Deadlocks sind Situationen, in denen sich Threads gegenseitig blockieren. Das kann beispielsweise passieren, wenn Locks in unterschiedlichen Reihenfolgen akquiriert wurden und dabei je ein Thread das Lock vom anderen Thread benötigt, bevor er fortfahren kann.
In Java gibt es einige Möglichkeiten zur Synchronisation. Den Monitor-Lock mit dem
synchronized keyword ist nur eine davon.
In dieser Artikelreihe werde ich versuchen die Parallelität und die Nebenläufigkeit anhand der Programmiersprache Java zu beschreiben.
Parallelität (Parallelism) hat zum Ziel, dass das Programm schneller fertig ist. Zum Beispiel kann man einen Ablauf in mehrere Teilabläufe aufteilen, damit die Teile dann auf verschiedenen Prozessen laufen können.
Nebenläufigkeit (Concurrency) hat nicht unbedingt ein schnelleres Programm zum Ziel, sondern Abläufe verzahnt durchführen können. Beispielsweise können Abläufe gleichzeitig auf gemeinsame Ressourcen lesend zugreifen oder gesperrt werden, wenn einer schreiben muss.
Es gilt jedoch, dass immer mehrere Threads interagieren.