JavaScript Multithreading-Beispiel mit Nashorn

Ich schreibe seit mehr als 20 Jahren JavaScript für Unternehmensanwendungen. Anhand dieser Aussage können Sie unschwer erkennen, dass ich schon sehr, sehr lange ein Verfechter von JavaScript bin. JavaScript ist eine wirklich einzigartige Sprache, die Qualitäten sowohl von prozeduralen als auch von funktionalen Sprachen aufweist. Trotzdem fehlte immer ein Feature: das Konzept des Multithreading. Im Laufe der Jahre habe ich eine Reihe von Workarounds entwickelt, um Threading zu emulieren, aber erst als Java vom Rhino zum Nashorn Compiler wechselte, wurde eine echte Multi-Threading-Verarbeitung in JavaScript möglich.

Zu diesem Zweck habe ich ein paar Beispiele für die Instanziierung eines Threads in einer JavaScript-Stage bereitgestellt. Vielleicht möchten Sie dies für Dinge wie Streaming-Abfragen, Hintergrundprotokollierung oder -verarbeitung usw. verwenden.

Der Code:

 
 function (doc) {
                logger.info("BEGIN THREAD TEST ****** ");
                try {
                    // EXAMPLE 1 - Thread in Extended Runnable
                    var Runnable = Java.type('java.lang.Runnable');
                    var Printer = Java.extend(Runnable, {
                        run: function () {
                            logger.info('printed from a separate thread');
                        }
                    });

                    var Thread = Java.type('java.lang.Thread');
                    new Thread(new Printer()).start();
                     
                    // EXAMPLE 2 - Thread Only
                    new Thread(function () {
                        logger.info('printed from another thread');
                    }).start();
                } catch (err) {
                    logger.error(err);
                }
                return doc;
            }

Aufschlüsseln

Was geht hier also vor? Der obige Code startet eigentlich zwei separate Threads: einen im Kontext eines erweiterten Runnable und einen eigenständigen Thread. Die Schnipsel sind relativ kurz, daher glaube ich nicht, dass wir die Schnipsel aufteilen müssen. Lange Rede, kurzer Sinn: Sie deklarieren eine Multithreading-fähige Klasse (alles, was Runnable implementiert), übergeben ihr eine Funktion als Argument und starten sie.

Mir ist klar, dass ich hier meinen inneren Geek zum Vorschein bringe, aber ich finde das wirklich wahnsinnig cool. Sie können jetzt funktionale Logik im Rahmen eines prozeduralen Objekts ausführen. Viel cooler geht es wirklich nicht mehr!

Dennoch gibt es einige wichtige Vorbehalte, die Sie beachten sollten:

  1. Wenn Sie einen eigenen Thread starten, sind Sie für dessen Beendigung verantwortlich. Stellen Sie sicher, dass Sie diese Verantwortung in Ihrem Code berücksichtigen.
  2. Die Anzahl der in der JVM zulässigen Threads ist endlich. Sie sollten Ihre Threads explizit starten (und stoppen) und sparsam mit ihnen umgehen. Denken Sie daran, dass ein benutzerdefinierter Prozess, der eine große Anzahl von Threads auslöst, möglicherweise mit anderen Prozessen in der Pipeline in Konflikt geraten könnte.
  3. Verwenden Sie keinen Thread in Ihrer Pipeline, es sei denn, es ist absolut notwendig.

 

Um es zusammenzufassen: Threading ist jetzt in JavaScript möglich, und es ist verdammt cool, aber nutzen Sie es mit Bedacht.

Share the knowledge

You Might Also Like

Das Zottelhund-Problem der KI

Der digitale Marktplatz steht vor einem seismischen Wandel, der den Verkaufspunkt vom...

Read More

Wie Unternehmen MCP nutzen können, um KI-Agenten intelligenter und zuverlässiger zu machen

Die generative KI hat unglaubliche Fortschritte gemacht - sie produziert Texte, Empfehlungen...

Read More

Was ist das Model Context Protocol (MCP) – und warum es für Enterprise AI wichtig ist

Im vergangenen Jahr wurden Unternehmen durch den Aufstieg von KI-Agenten in den...

Read More

Quick Links