Eine Frage zu DCop:
Wenn man z.B. in einem CGI-Script per DCop PDF Dateien erzeugen will, kommt der DCop-Client dann durcheinander wenn mehrere Anfragen gleichzeitig kommen?
In anderen Worten: Sind DCop Scripte Thread-Safe?
thomas
PS: Danke für den interessanten Vortrag!
On Thursday 13 June 2002 19:21, Thomas Guettler wrote:
Wenn man z.B. in einem CGI-Script per DCop PDF Dateien erzeugen will, kommt der DCop-Client dann durcheinander wenn mehrere Anfragen gleichzeitig kommen?
Nein, wobei DCOP für Desktop Communication Protocol steht, und wahrscheinlich wenig Sinn in klassischen CGI-Anwendungen macht. DCOP-Aufrufe werden nur von bereits laufenden (und sich beim DCOPserver registriert habenden) Anwendungen empfangen.
In anderen Worten: Sind DCop Scripte Thread-Safe?
Für DCOP-fähige Applikationen kommen alle DCOP-Aufrufe vom Server. Das heißt, wenn 100 Skripte oder Programme gleichzeitig Befehle absenden, dann ist das so als ob das ein Skript allein durchgeführt hätte. Weil aber gut entworfene DCOP-Anwendungen keine state machine beinhalten (d.h. alle Aufrufe sind unabhängig voneinander idempotent möglich), kann dabei nichts wirklich schiefgehen, wobei das Ergebnis trotzdem nicht gewollt sein muß :)
Ein Beispiel: Eine Bildverarbeitung (nennen wir sie mal Kimp) stellt über image(int number) die einzelnen Bilder bereit. Jedes Bild kann mit verschiedenen Effekten bearbeitet werden, wir nehmen mal Halbieren und Stauchen. Der Linuxdistributor XYZ bietet nun 2 Perlskripte an, von denen das eine per DCOP-Modul das erste offene Bild verwischt, das andere das Bild staucht. Also in etwa:
#!/usr/bin/perl use DCOP::Client; DCOPClient->send("kimp", "image(0) halbieren"); bzw. DCOPClient->send("kimp", "image(0) stauchen");
Jetzt gibt es eine race condition, die zwei verschiedene Ausgänge hat: Entweder, das Bild ist gestaucht und die gestauchte Fläche repräsentiert das gesamte vorherige Bild, oder aber (wenn zuerst halbiert und dann gestaucht wird) die Hälfte des resultierenden Bildes ist mit einer Hälfte des Originalbildes gefüllt und die andere Hälfte enthält den Standardhintergrund.
Wenn ein DCOP-Aufruf eintrifft, wird er allerdings vollständig bearbeitet, er wird also nicht unterbrochen durch neue.
Josef Spillner
On Thu, Jun 13, 2002 at 10:21:23PM +0200, Josef Spillner wrote:
On Thursday 13 June 2002 19:21, Thomas Guettler wrote:
Wenn man z.B. in einem CGI-Script per DCop PDF Dateien erzeugen will, kommt der DCop-Client dann durcheinander wenn mehrere Anfragen gleichzeitig kommen?
Nein, wobei DCOP für Desktop Communication Protocol steht, und wahrscheinlich wenig Sinn in klassischen CGI-Anwendungen macht.
Eine Möglichkeit wäre z.B. mit einem DCop-fähigen Textverarbeitungsprogramm Berichte zu erstellen. Das Erstellen der Berichte sollte aber natürlich unabhängig voneinander sein. D.h. wenn zwei Berichte gleichzeitig erstellt werden darf es zu keinen Konflikten kommen.
Naja, ist auch nicht wichtig, war bloß eine Überlegung.
thomas
lug-dd@mailman.schlittermann.de