Es gibt viele Antworten darauf, aber es kann verwirrend sein. Ich mag es so zu denken, und vielleicht hilft es ?:
Gleichzeitige Programmierung ist Code, der sich nicht um die Ausführungsreihenfolge kümmert. Java ist eine schlechte Sprache für die gleichzeitige Programmierung, aber es gibt Bibliotheken und Frameworks, die helfen. JavaScript ist eine hervorragende Sprache für die gleichzeitige Programmierung, und es ist oft schwierig, wenn Sie etwas schreiben möchten, das nicht gleichzeitig abläuft (z. B. wenn Sie die Ausführungsreihenfolge erzwingen möchten). Die gleichzeitige Programmierung eignet sich hervorragend für die ereignisgesteuerte Programmierung (wobei die Ausführungsreihenfolge von Ereignis-Listenern bestimmt wird, z. B. von Code, der in Ihrem Browser ausgeführt wird, wenn Sie auf eine Schaltfläche klicken oder in ein Feld eingeben).
Ein Beispiel wäre das Erstellen von hundert HTTP-Anforderungen. In NodeJS besteht die einfachste Lösung darin, alle 100 Anforderungen gleichzeitig mit einer Rückrufmethode zu öffnen. Wenn die Antworten zurückkommen, wird jedes Mal eine Methode ausgeführt. Das ist gleichzeitige Programmierung. In Ruby besteht die einfachste (häufigste) Lösung darin, eine Anfrage zu öffnen und die Antwort zu verarbeiten, die nächste Anfrage zu öffnen und die Antwort zu verarbeiten usw. Bei vielen Anfragen ist NodeJS schneller zu erledigen, obwohl dies erforderlich ist Vermeiden Sie es, den Server zu hämmern oder Ihre ausgehenden Verbindungen zu maximieren (aus Versehen einfach). Sie können den Ruby gleichzeitig schreiben, aber es ist nicht so, wie der meiste Ruby-Code geschrieben ist, und es tut ein wenig weh, es zu tun.
Parallele Programmierungist Code, der gleichzeitig in mehreren Threads oder Prozessen ausgeführt werden kann. Auf diese Weise können Sie die Leistung optimieren, indem Sie den Code auf mehreren CPUs ausführen (häufig auch auf mehreren Computern, wie Sie es bei Akka tun könnten). Da NodeJS nicht mit mehreren Threads arbeitet und keine parallele Ausführung stattfindet, müssen Sie sich keine Gedanken über das Schreiben von threadsicherem Code machen (und der meiste JavaScript-Code, den ich gesehen habe, ist nicht threadsicher). In Java ist die parallele Programmierung sehr stark integriert, auch wenn die Sprache die gleichzeitige Programmierung nicht zum normalen Muster macht, und Sie müssen sich häufig um die Thread-Sicherheit kümmern. Wenn Sie eine Website in Java schreiben, wird diese normalerweise in einem Container ausgeführt, der jede Anforderung in einem separaten Thread im selben Speicher ausführt.
Einige der oben genannten Punkte hängen vom Umfang und den Grenzen ab, über die Sie sprechen. Ich arbeite an Websites. Der meiste Java-Code, den ich sehe, ist keine gleichzeitige Programmierung. Sicher, wenn Sie ausreichend verkleinern, ist die Reihenfolge, in der die Kundenanforderungen eingehen, nicht wichtig. Wenn Sie jedoch weiter hineinzoomen, wird die Reihenfolge, in der die Dinge ausgeführt werden, durch den Code vorgegeben. Der Code ist jedoch so geschrieben, dass die Anforderungen parallel mit vielen gemeinsam genutzten Objekten ausgeführt werden können, die threadsicher sein müssen.
In der Zwischenzeit ist der meiste JavaScript-Code, den ich sehe, gleichzeitig: Er ist so geschrieben, dass die Ausführungsreihenfolge auf vielen Ebenen unwichtig ist. Es wurde jedoch nicht geschrieben, um die parallele Ausführung im gemeinsam genutzten Speicher zu unterstützen. Natürlich können Sie denselben Code über mehrere Prozesse hinweg parallel ausführen, aber die Objekte werden nicht gemeinsam genutzt, sodass es sich nicht um eine sinnvolle Parallelprogrammierung handelt.
Zum besseren Verständnis gefallen mir die Abbildungen in der oberen Antwort auf diese Frage hier: https://www.quora.com/Was- sind- die- Unterschiede- zwischen- paralleler- gleichzeitiger- und- asynchroner- Programmierung?