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