Gemeinsame Ressourcen, Konflikte, gemeinsamer Zugriff – 1

„Hallo Amigo! Ich möchte dir etwas über das Teilen von Ressourcen erzählen. Natürlich über verschiedene Threads hinweg.“

„Ich spreche ständig über die Probleme, die bei der Arbeit mit mehreren Threads auftreten, und darüber, wie man sie löst. Das bedeutet nicht, dass die Verwendung von Threads schlecht ist. Threads sind ein sehr leistungsfähiges Werkzeug. Tatsächlich können Sie damit Ihr Programm schneller und gleichmäßiger machen.“ zuverlässiger. Je komplexer ein Programm ist, desto mehr Threads und verschiedene unabhängige Teile hat es.“

„Die Aufteilung eines Programms in unabhängige (lose gekoppelte) Teile ist sehr vorteilhaft.“

„Stellen Sie sich vor, Ihr Programm ist intern in 100 Threads unterteilt. Sie haben aber nur einen Dual-Core-Prozessor. Das bedeutet, dass auf jedem Kern durchschnittlich 50 Threads ausgeführt werden.“

„Wenn Sie die Leistung des Programms steigern müssen, kaufen Sie einfach einen Dual-Prozessor-Server und ein paar tolle Prozessoren dafür. Damit könnten Sie bis zu 32 Kerne erhalten, was zu einer 2- bis 20-fachen Leistungssteigerung führt. Abhängig von der Anzahl.“ in wirklich unabhängige Teile ist es unterteilt.“

„Das ist einer der Gründe, warum Java in der Unternehmensentwicklung dominiert. Wenn ein Unternehmen ein komplexes internes Programm hat, das von 20 Entwicklern geschrieben wird, dann ist es viel günstiger, einen anderen Server zu kaufen, als die Leistung des Programms durch Optimierung zu verdoppeln.“

„Darum geht es also.“

„Aber! Jedes Mal, wenn sich ein Entwickler für die Verwendung eines anderen Threads entscheidet, löst er ein Problem und erstellt zwei. Immer mehr Threads werden die Leistung des Programms nicht endlos steigern.“

„Erstens hat jedes Programm Arbeit, die nicht aufgeteilt und parallel auf verschiedenen Threads ausgeführt werden kann. Zweitens werden alle Threads auf demselben Prozessor ausgeführt. Je mehr Threads Sie haben, desto langsamer arbeitet jeder einzelne.“

„Und was am wichtigsten ist: Threads verwenden oft dieselben Objekte (normalerweise als ‚gemeinsam genutzte Ressourcen‘ bezeichnet).“

„Zum Beispiel möchte ein Thread Informationen über die von ihm abgeschlossene Arbeit in einer Datei speichern. Wenn es mehrere solcher Threads gibt und sie Informationen in dieselbe Datei schreiben möchten, stören sie sich gegenseitig. Um zu verhindern, dass die Datei zu einer Datei wird Durcheinander, der Zugriff auf die Datei ist begrenzt, d. h. während ein Thread die Datei verwendet, warten andere.

„Ja, ich erinnere mich. Das machst du mit dem synchronisierten Schlüsselwort.“

"Genau richtig."

„Und was ist, wenn die Threads in verschiedene Dateien schreiben?“

„Formal handelt es sich um unterschiedliche Objekte, die sich aber vermutlich auf derselben Festplatte befinden.“

„Ist es also wirklich möglich, etwas im Prozessor zu parallelisieren?“

„Technisch gesehen ja, aber sobald Ihr Thread etwas anderes als die Daten benötigt, die er hat, kann es sein, dass etwas bereits von einem anderen Thread belegt ist – und Ihr Thread muss warten.“

„Na, was soll ich dann machen? Woher weiß ich, ob ich viele Threads erstellen soll oder nicht?“

„Dies wird direkt durch die Architektur Ihres Programms bestimmt. Jedes Projekt hat seinen eigenen ‚Architekten‘, der alle im Programm verwendeten ‚Ressourcen‘ kennt, ihre Grenzen kennt und weiß, wie gut/schlecht sie parallelisiert sind.“

„Und wenn ich es nicht weiß?“

„Es gibt zwei Möglichkeiten:“

a) unter der Aufsicht einer Person arbeiten, die dies tut

b) Holen Sie sich ein paar Klumpen, indem Sie es selbst herausfinden

„Ich bin ein Roboter: Ich bekomme keine Beulen – nur Dellen.“

„Na dann besorgen Sie sich ein paar Dellen.“

„Ich verstehe. Danke. Du hast einige Dinge geklärt, über die ich mir bereits Gedanken gemacht hatte.“