Heim >Java >javaLernprogramm >Java gleicher Thread

Java gleicher Thread

黄舟
黄舟Original
2017-02-28 10:22:401457Durchsuche

Derselbe Thread ist ein Parallelitätsmodell. Die Bedeutung dieses Parallelitätsmodells besteht darin, dass ein Single-Thread-System nach außen in N Single-Thread-Systeme erweitert wird. Das Ergebnis sind N parallel laufende Single-Threaded-Systeme.

Ein Same-Thread-System ist kein reines Single-Thread-System, da es mehrere Threads enthält. Aber jeder dieser Threads läuft wie ein Single-Thread-System.

Warum ist es ein Single-Thread-System?

Heute fragen Sie sich vielleicht, warum jedes System auf Single-Threaded ausgelegt ist. Single-Thread-Systeme erfreuen sich zunehmender Beliebtheit, da ihr Parallelitätsmodell einfacher ist als Multi-Threading. Ein Single-Thread-System teilt keine Daten mit anderen Threads. Dadurch können Threads nicht gleichzeitige Datenstrukturen verwenden und die CPU und den CPU-Cache besser nutzen.

Leider können Single-Threaded-Systeme die Vorteile moderner CPUs nicht voll ausschöpfen. Eine moderne CPU verfügt oft über 2, 4 oder mehr Kerne. Jeder Kern fungiert als separate CPU. Ein Single-Thread-System nutzt nur einen dieser Kerne, wie unten gezeigt:


Gleicher Thread, Erweiterung von Single-Thread

Um alle CPU-Kerne vollständig auszunutzen, kann ein Single-Threaded-System so skaliert werden, dass es den gesamten Computer nutzt.

Ein Thread pro CPU

Das gleiche Threading-System führt normalerweise einen Thread pro CPU im Computer aus. Wenn dieser Computer 4 CPUs oder eine CPU mit 4 Kernen enthält, werden auf ihm standardmäßig 4 Instanzen desselben Threads (4 Single-Threaded-Systeme) ausgeführt, wie im Diagramm dargestellt:


Kein gemeinsamer Status

Ein identisches Thread-System ähnelt einem Multithread-System, da mehrere Threads intern ausgeführt werden. Aber hier gibt es einen subtilen Unterschied.

Der Unterschied zwischen demselben Thread und einem Multithread-System besteht darin, dass es im selben Thread-System keine gemeinsam genutzten Daten gibt. Threads greifen nicht gleichzeitig auf den Speicher zu. Es gibt keine gleichzeitigen Datenstrukturen usw. Der Unterschied ist in der folgenden Abbildung dargestellt:


Die Reduzierung des gemeinsamen Status führt dazu, dass sich jeder Thread so verhält, als wäre es ein Single-Threaded-System. Ein identisches Thread-System kann jedoch mehr als einen einzelnen Thread enthalten, sodass es sich nicht wirklich um ein „Single-Threaded-System“ handelt. Mangels eines besseren Namens finde ich es treffender, ein solches System als Same-Thread-System zu bezeichnen, statt als „Multi-Thread-System mit Single-Thread-Design“. Der gleiche Thread ist sehr einfach zu sagen und noch einfacher zu verstehen.

Derselbe Thread bedeutet hauptsächlich, dass die Daten im selben Thread ausgeführt werden und keine gemeinsamen Daten vorhanden sind.

Lastverteilung

Natürlich muss ein System identischer Threads zwischen den einzelnen Thread-Instanzen, die für diese Arbeitslast ausgeführt werden, gemeinsam genutzt werden. Wenn nicht, erhält nur eine Instanz Arbeit und das System ist effektiv Single-Threaded.

Wie genau Sie die Last auf verschiedene Instanzen verteilen, hängt vom Design Ihres Systems ab. Ich werde einige davon in den folgenden Abschnitten behandeln.

Single-Threaded-Microservices

Wenn Ihr System mehrere Microservices enthält, kann jeder Microservice in einem Single-Thread-Modus ausgeführt werden. Wenn Sie mehrere Single-Threaded-Microservices auf demselben Computer bereitstellen, kann jeder Microservice einen separaten Thread auf einer separaten CPU ausführen.

Microservices teilen keine Daten, daher sind Microservices ein guter Anwendungsfall für ein System mit demselben Thread.

Dienste mit Shard-Daten

Wenn Ihr System keine Datenfreigabe oder zumindest keine Datenbank benötigt, können Sie möglicherweise Sharding durchführen Es ist ein Teil dieser Datenbank. Sharding bedeutet, dass die Daten auf mehrere Datenbanken aufgeteilt werden. Die Daten werden repräsentativ getrennt, sodass sich zusammengehörige Daten in derselben Datenbank befinden. Beispielsweise werden alle Daten, die zu einer „Eigentümer“-Entität gehören, in dieselbe Datenbank eingefügt. Sharding ist nicht Gegenstand dieses Tutorials, daher müssen Sie sich einige Tutorials zu diesem Thema ansehen.

Thread-Kommunikation

Wenn Threads im selben Thread kommunizieren müssen, tun sie dies über die Nachrichtenübermittlung. Ein Thread möchte eine Nachricht an Thread A senden. Dies kann er tun, indem er eine Nachricht (eine Folge von Bytes) generiert. Thread B kann dann die gesamte Nachricht (Bytefolge) kopieren und lesen. Durch das Kopieren der Nachricht stellt Thread B fest, dass Thread A die Nachricht nicht ändern kann, wenn er die Nachricht ändert. Sobald es kopiert wurde, ist es für Thread A unveränderlich.

Das schematische Diagramm dieses Prozesses lautet wie folgt:


Diese Thread-Kommunikation kann durch Warteschlangen, Pipes, Unix-Sockets und TCP ersetzt werden Steckdosen. Was auch immer für Ihr System funktioniert.

Einfacheres Parallelitätsmodell

Jedes System, das in seinem eigenen Thread läuft, kann dasselbe Thread-System verwenden, wenn es Single-Threaded ist. Dies bedeutet, dass das interne Parallelitätsmodell einfacher wird als Threads mit gemeinsam genutztem Status. Sie müssen sich keine Gedanken über gleichzeitige Datenstrukturen und alle Parallelitätsprobleme machen.

Illustration

Hier ist eine Illustration eines Single-Threaded-, Multi-Threaded- und Same-Threaded-Systems. Sie können sich leichter einen Überblick über ihre Unterschiede verschaffen

Das erste Diagramm zeigt ein Single-Threaded-System:


Kapitel Das zweite Bild zeigt a Multithread-System mit gemeinsam genutzten Daten:


Das dritte Bild zeigt denselben Thread mit zwei Threads mit getrennten Datensystemen, die durch Weitergabe von Informationen miteinander kommunizieren.


Das Obige ist der Inhalt desselben Java-Threads. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www .php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn