Ich arbeite an einem Java-Daemon, der Parallelität erfordert: eine Endlosschleife, die eine Jobwarteschlange überwacht ( redis ) und jeden Job an einen Worker verteilt . Der Arbeiter muss nicht unbedingt einen Wert zurückgeben.
Ich fand Executors sehr nützlich und verwende einen ThreadPoolExecutor , um eine Anzahl von Worker-Threads zu verwalten.
Obwohl diese Mitarbeiter Code von Drittanbietern ausführen, der möglichst isoliert ausgeführt werden muss, vermeiden Sie die Freigabe statischer Eigenschaften.
Meine Frage: Gibt es eine Java-Bibliothek / ein Java-Framework, das ähnliche Funktionen wie Executors bietet, zB:
.. aber Prozesse anstelle von Threads erzeugen?
Bearbeiten:
Nun verstehe ich, dass Sie Bibliotheken von Drittanbietern haben, die Sie irgendwie isoliert ausführen möchten - also haben sie beispielsweise keinen Zugriff auf statische Variablen.
Ich würde Ihre Aufgaben in einem anderen ClassLoader
ausführen. Es gibt Web-Frameworks, die diesen Mechanismus verwenden, um Webanforderungen zu isolieren. Das Übergeben von Daten zwischen den Klassenladern ist ein bisschen schwierig. Ich bin mir nicht sicher, wie Jetty es macht. Vielleicht mit einer Steckdose? Hier ist ein interessanter Artikel über die Verwendung von System.out
zum Teilen von Objekten . Sicherlich ein Hack.
Meine Frage ist: Gibt es eine Java-Bibliothek / ein Java-Framework, das ähnliche Funktionen wie Executors bietet, aber Prozesse anstelle von Threads hervorbringt?
Moderne Betriebssysteme verwenden moderne Multi-Prozessor-Architekturen, um Java-Threads optimal zu nutzen. Wenn ein anderer Thread innerhalb des aktuellen Prozesses erstellt wird, wird er auf einem anderen Prozessor ausgeführt, sofern er verfügbar ist, und er wird viel effizienter sein, als wenn er diese Aufgabe in einem komplett separaten Prozess ausführt, insbesondere in einem so schweren Prozess wie einem anderen JVM-Prozess.
>Haben Sie schon einmal daran gedacht, mit dem ProcessBuilder Ihren isolierten Prozess zu verwalten?
%Vor%Ich weiß nicht, ob es sinnvoll ist, ausführbare Aufgaben zu übermitteln, die Unterprozesse an einen Executor verwalten, aber es kann eine Lösung sein, Ihre Mitarbeiter zu isolieren.
Tags und Links java multithreading concurrency executorservice threadpool