Michael Schröpl: Was ist sinnvoller? 1x1000 oder 5x200?

Beitrag lesen

Hi lars,

bedeutet das, daß ein script, welches mehrere prozesse abarbeitet,

Ein Prozeß arbeitet ein Skript ab - nicht umgekehrt.

ressourcenschonender sei, als die arbeit auf mehrere cgis zu verteilen, da es "sukzessive" ausgeführt wird?

Zunächst einmal sind CGI-Skripte wahrscheinlich überhaupt der falsche Weg, um eine solche Aufgabe zu bearbeiten - denn ein Zusammenhang mit einem HTTP-Request ist ja (hoffentlich) gar nicht gegeben: Als Antwort auf den HTTP-Request muß _eine_ Ressource zurück geliefert werden. Falls Du dann erreichen willst, daß diese Ressource das Ergebnis von 1000 Verarbeitungsschritten (welcher Art auch immer) darstellen, solltest Du damit rechnen, den CGI-Timeout des Servers zu überschreiten - will sagen: Die Chance, daß Dein Problem auf diese Weise unlösbar ist, halte ich für ziemlich hoch.

Also vergessen wir CGI erst mal wieder und sehen uns den Server an. Ist das Dein eigener Server? Mußt Du die Ressourcen mit anderen Anwendern teilen? Damit würde ich schon mal anfangen. Wenn Du auf einer Maschine, wo Du nur "Gast" bist, 1000 parallele Prozesse zu starten versuchst, dann machst Du Dich dort nicht sonderlich beliebt, während das bei Deinem eigenen Server ggf. kein Problem darstellen wird.
Um die quasi-parallele Verarbeitung vieler Prozesse zu ermöglichen, verwaltet das Betriebssystem eine Warteschlange und weist den jeweiligen Prozessen üblicherweise (nach einem mehr oder weniger flexiblen Verfahren) sogenannte Zeitscheiben zu. Die Prozesse rechnen also nicht gleichzeitig, sondern abwechselnd ... wobei es natürlich auch Server mit mehreren CPUs gibt, wo dann tatsächlich echt gleichzeitig gearbeitet werden kann ... aber alles in allem ist Prozeßwechsel nicht völlig kostenlos. Wenn Du durch Parallelisierung nichts gewinnen kannst, dann laß es bleiben.
Wie verhalten sich diese Prozesse zueinander? Greifen sie auf gemeinsame Ressourcen zu, so daß eine parallele Verarbeitung einen zusätzlichen Synchronisationsaufwand erfordern würde? Dann wäre eine parallele Verarbeitung ggf. wesentlich aufwändiger als eine sequentielle.

Umgekehrt könnte es sein, daß diese Prozesse von ihrem Ablaufcharakter her sehr gut parallelisierbar sind, weil sie wenige Ressourcen benötigen und keine Abhängigkeiten untereinander aufweisen.
Es kann sogar sein, daß diese Prozesse gemeinsam laufen _wollen_, weil dabei beispielsweise bestimmte Ressourcen, die von allen diesen Prozessen nur gelesen werden müssen, nur ein einziges Mal im Arbeitsspeicher liegen müssen. Wenn diese Prozesse nacheinander und konkurrierend mit weiteren Prozessen laufen, kann es passieren, daß diese Ressource immer mal wieder aus dem Arbeitsspeicher ausgelagert wird (weil die konkurrierenden Prozesse diesen Platz anders belegen wollen und er vorübergehend unbenutz aussah) und dann erst wieder eingelagert werden muß ... laufen jedoch viele dieser Prozesse gleichzeitig, dann wird die Zugriffsrate aller Prozesse auf diese Ressource so hoch sein, daß letztere wahrscheinlich dauerhaft im Arbeitsspeicher vorrätig sein wird und kein zusätzlicher Verwaltungsaufwand anfällt.

Dies alles ist nicht wirklich eine exakte Antwort auf Deine Frage - es ist lediglich eine Beschreibung, wieso Deine Frage ohne _sehr_ detaillierte weitere Angaben unmöglich zu beantworten ist. Performance-Aspekte gehören zu den komplexeren Aufgaben der IT ...

Viele Grüße
      Michael

--
T'Pol: I meant no insult.
V'Lar: Of course not. You're simply speaking your mind ... as you always have.