Angenommen, ich habe eine normale Desktop-Anwendung, die für die Ausführung auf einer einzelnen Maschine konzipiert ist, beispielsweise eine Anwendung zur Videobearbeitung. Solche Anwendungen erzeugen häufig Hintergrund-Threads, die rechenintensiv sind, z. B. Video-Rendering.
Ich habe mich gefragt, ob es technisch machbar ist, diese rechenintensiven Threads auf eine leistungsstärkere Maschine zu „verlagern“ und dies auf eine für den Benutzer nahtlose Weise zu tun. Auf der Maschine des Benutzers wird nur der UI-Thread ausgeführt, während der Rest der schweren Arbeit auf der leistungsstärkeren Remote-Maschine erledigt wird. Nehmen wir an, dass die Daten, die der Thread zur Durchführung der Berechnung benötigt (in unserem Beispiel die Videodateien), auf der Festplatte der Remote-Maschine verfügbar sind.
Ich verstehe, dass es nicht so einfach ist, zwei Threads auf zwei völlig unterschiedlichen Prozessoren so miteinander kommunizieren zu lassen, als ob sie auf derselben Maschine laufen würden - aber ich habe mich gefragt, was diegrundsätzliche Einschränkunghier ist und ob es bekannte Lösungen für diesen Anwendungsfall gibt.
Antwort1
Eine „normale“ Desktopanwendung, die für die Ausführung auf einer einzelnen Maschine konzipiert ist, wäre nicht in der Lage, ihre Threads auf diese Weise aufzuteilen.
Dazu wäre eine speziell entwickelte Anwendung mit einer programmierten Schnittstelle zwischen Computern erforderlich, beispielsweise eine Remote-Desktop-Anwendung.
Ohne eine dedizierte Hochgeschwindigkeitsverbindung zwischen den beiden Computern würde die mit der Verbindung verbundene Latenz im Allgemeinen dazu führen, dass der Bildschirm für zu dynamische Videoanwendungen ungeeignet wäre.
Antwort2
Dies hängt stark von der Aufgabe ab und auch davon, wie Sie „nahtlos“ genau definieren.
Bei bestimmten Lasttypen geschieht dies bereits. Tatsächlich kann die von Ihnen definierte Videobearbeitungsaufgabe in einigen Fällen genau dies tun - der Begriff lautet "Renderingfarm".
Allgemeiner gesagt gibt es viele Arten von „Cloud Computing“, die dieses Problem lösen.
(Das Problem bei dieser Antwort besteht darin, wie Sie „nahtlos“ definieren. Es gibt sicherlich Architekturen – hauptsächlich Softwarearchitekturen –, die diese Art von Vorgang überwachen und nahtlos gestalten können. Dazu sind jedoch mäßig komplexe und aufgabenabhängige Setups erforderlich. Außerdem sind nicht alle Aufgaben für dieses Modell geeignet – insbesondere, wenn die Bandbreite wahrscheinlich ein Problem darstellt oder Aufgaben nicht parallelisiert werden können.)