Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Bryan und ich (Thomas) lernten uns bei meinem Vorstellungsgespräch in der San Franciscoer Niederlassung von DeNA kennen, einem japanischen Unternehmen, das mobile Spiele entwickelt. Anscheinend wollte die Geschäftsleitung ablehnen, aber nachdem wir beide später am Abend bei einem Node.js-Treffen zusammen abgehangen hatten, überzeugte Bryan sie, mir ein Angebot zu machen.

Während meiner Zeit bei DeNA haben Bryan und ich daran gearbeitet, wiederverwendbare Node.js-Module zu schreiben, damit die Spielteams ihre Spielserver aufbauen und die Komponenten entsprechend den Anforderungen ihres Spiels kombinieren konnten. Die Leistung war etwas, das wir immer wieder gemessen haben, und die Beratung von Spielteams in Sachen Leistung war ein Teil unserer Arbeit; unsere Server wurden ständig von Entwicklern in einer Branche unter die Lupe genommen, die traditionell auf C++ setzt.

Wir beide haben auch in anderen Funktionen zusammengearbeitet. Eine weitere Aufgabe war bei einem kleinen Sicherheits-Startup namens Intrinsic, wo wir uns darauf konzentrierten, Node.js-Anwendungen so umfassend und detailliert abzusichern, dass ich bezweifle, dass die Welt jemals ein anderes Produkt wie dieses sehen wird. Auch bei diesem Produkt war die Leistungsoptimierung ein wichtiges Thema, da die Kunden keine Einbußen beim Durchsatz hinnehmen wollten. Wir haben viele Stunden damit verbracht, Benchmarks durchzuführen, Flamegraphs zu studieren und uns durch den internen Node.js-Code zu wühlen. Wäre das Worker-Thread-Modul in allen von unseren Kunden geforderten Node.js-Versionen verfügbar gewesen, hätten wir es zweifellos in das Produkt integriert.

Wir haben auch schon in anderen Bereichen zusammengearbeitet. Ein Beispiel dafür ist die NodeSchool SF, bei der wir beide freiwillig anderen beigebracht haben, wie man JavaScript benutzt und Node.js-Programme erstellt. Außerdem haben wir auf vielen Konferenzen und Meetups gemeinsam gesprochen.

Ihre beiden Autoren haben eine Leidenschaft für JavaScript und Node.js und dafür, sie anderen zu vermitteln und Missverständnisse auszuräumen. Als wir feststellten, dass es so einen extremen Mangel an Dokumentation über die Entwicklung von Multithreading-JavaScript-Anwendungen gab, wussten wir, was wir tun mussten. Dieses Buch entstand aus unserem Wunsch heraus, andere nicht nur über die Fähigkeiten von JavaScript aufzuklären, sondern auch zu beweisen, dass Plattformen wie Node.js genauso gut wie jede andere sind, wenn es darum geht, performante Dienste zu entwickeln, die die verfügbare Hardware nutzen.

Zielpublikum

Der ideale Leser dieses Buches ist ein Ingenieur, der seit ein paar Jahren JavaScript schreibt und nicht unbedingt Erfahrung mit dem Schreiben von Multithreading-Anwendungen oder sogar mit traditionelleren Multithreading-Sprachen wie C++ oder Java hat. Wir fügen zwar einige C-Beispiele als eine Art Multithreading-Lingua Franca bei, aber es wird nicht erwartet, dass der Leser damit vertraut ist oder es überhaupt versteht.

Wenn du Erfahrung mit solchen Sprachen hast, ist das großartig und dieses Buch wird dir helfen, das JavaScript-Äquivalent zu den Funktionen der Sprache zu verstehen, mit der du vielleicht vertraut bist. Wenn du aber nur mit JavaScript Code geschrieben hast, ist dieses Buch auch für dich geeignet. Wir vermitteln dir Informationen auf mehreren Ebenen; dazu gehören sowohl Low-Level-API-Referenzen als auch High-Level-Patterns und viele technische Hinweise, die dir helfen, Lücken zu schließen.

Ziele

Das vielleicht überschwänglichste Ziel dieses Buches ist es, der Community zu zeigen, dass es möglich ist, mit JavaScript Multithreading-Anwendungen zu erstellen. Traditionell war JavaScript-Code auf einen einzigen Kern beschränkt, und tatsächlich gibt es viele Twitter-Threads und Forenbeiträge, die die Sprache als solche beschreiben. Mit einem Titel wie Multithreaded JavaScript hoffen wir, die Vorstellung zu zerstreuen, dass JavaScript-Anwendungen auf einen einzigen Kern beschränkt sind.

Konkret geht es darum, dir, dem Leser, verschiedene Aspekte beim Schreiben von Multithreading-JavaScript-Anwendungen zu vermitteln. Wenn du dieses Buch gelesen hast, wirst du die verschiedenen Webworker-APIs in den Browsern verstehen, ihre Stärken und Schwächen und wann du welche verwenden solltest. Was Node.js angeht, wirst du das Modul für Worker-Threads verstehen und wissen, wie seine APIs im Vergleich zu denen des Browsers aussehen.

Das Buch konzentriert sich auf zwei Ansätze zur Entwicklung von Multithreading-Anwendungen: einen mit Message Passing und einen mit Shared Memory. Wenn du dieses Buch liest, wirst du die APIs verstehen, die für die Implementierung der beiden Ansätze verwendet werden, und du wirst wissen, wann du den einen oder den anderen Ansatz verwenden solltest und in welchen Situationen sie kombiniert werden können.

In diesem Buch verwendete Konventionen

In diesem Buch werden die folgenden typografischen Konventionen verwendet:

Kursiv

Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Constant width bold

Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.

Constant width italic

Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.

Tipp

Dieses Element steht für einen Tipp oder eine Anregung.

Hinweis

Dieses Element steht für einen allgemeinen Hinweis.

Warnung

Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.

Code-Beispiele verwenden

Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://github.com/MultithreadedJSBook/code-samples zum Download bereit .

Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teildes Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eineGenehmigung erforderlich.

Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Multithreaded JavaScript von Thomas Hunter II und Bryan English (O'Reilly). Copyright 2022 Thomas Hunter II und Bryan English, 978-1-098-10443-6."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

O'Reilly Online Learning

Hinweis

Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.

Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter http://oreilly.com.

Wie du uns kontaktierst

Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Nord
  • Sebastopol, CA 95472
  • 800-998-9938 (in den Vereinigten Staaten oder Kanada)
  • 707-829-0515 (international oder lokal)
  • 707-829-0104 (Fax)

Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/multithreaded-js aufrufen .

Schreib eine E-Mail an , um Kommentare oder technische Fragen zu diesem Buch zu stellen.

Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter http://oreilly.com.

Du findest uns auf Facebook: http://facebook.com/oreilly.

Folge uns auf Twitter: http://twitter.com/oreillymedia.

Sieh uns auf YouTube: http://www.youtube.com/oreillymedia.

Danksagungen

Dieses Buch wurde dank der ausführlichen technischen Berichte der folgenden Personen möglich:

Anna Henningsen(@addaleax)

Anna gehört derzeit zum MongoDB Developer Tools Team in Deutschland. In den letzten fünf Jahren hat sie aktiv zum Node.js-Kern beigetragen und war maßgeblich an der Implementierung von Worker Threads für die Plattform beteiligt. Ihre Leidenschaft für Node.js und seine Community ist ungebrochen.

Shu-yu Guo(@_shu)

Shu arbeitet an der Implementierung und Standardisierung von JavaScript. Er ist ein Delegierter des TC39, einer der Herausgeber der ECMAScript-Spezifikation und der Autor des Speichermodells. Derzeit arbeitet er bei Google an der V8-Engine und ist für die Implementierung von JavaScript-Sprachfeatures und Standards zuständig. Zuvor hat er bei Mozilla und Bloomberg gearbeitet.

Fernando Larrañaga(@xabadu)

Fernando ist ein Ingenieur und Open-Source-Mitarbeiter, der seit mehreren Jahren JavaScript- und Node.js-Communities sowohl in Südamerika als auch in den USA leitet. Zurzeit ist er Senior Softwareentwicklung bei Square und Organisator der NodeSchool SF. Nach früheren Tätigkeiten bei anderen großen Tech-Unternehmen wie Twilio und Groupon entwickelt er seit 2014 Node.js für Unternehmen und skaliert Webanwendungen, die von Millionen von Nutzern verwendet werden.

Get Multithreading-Javascript now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.