JavaScript Multithreading-Beispiel mit Nashorn

Threading ist jetzt in JavaScript möglich. Erfahren Sie, wie Sie mit Nashorn einen Thread in einer JavaScript-Stage instanziieren.

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.

You Might Also Like

B2B-KI-Benchmarkstudie 2025: Was wir in den Schützengräben sehen

Laden Sie die B2B-KI-Benchmark-Highlights 2025 von Lucidworks herunter. Sehen Sie sich die...

Read More

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Quick Links