Mailinglisten-Archive |
> Nun weiß ich, das einige PHP-Chats shared-memory-funktionen nutzen, um > dieses Problem in den Griff zu bekommen, die mir aber bis heute recht > schleierhaft sind und für die ich bis jetzt auch keine gute Doku > gefunden habe, das Handbuch wie div. deutsche PHP-Bücher beschränken > sich auf die Darstellung der Syntax der Funktionen. Anmerkung: zu diesem Thema werde ich wahrscheinlich einen Vortrag auf dem PHP-Kongress halten, wenn also Interesse an der Beantwortung bestimmter Fragen im Zusammenhang mit Interprozeßkommunikation und Shared Memory bestehen, würde ich mich über eine Mail freuen. phpChat legt bei Installation bzw. beim ersten Login eines Users ein Shared-Memory-Segment an. In diesem Segment wird eine Arrayvariable abgelegt, die zu jeder Session-ID ein Flag enthält, welches Angibt, ob für diese Session eine neue Nachricht vorliegt oder nicht. phpChat arbeitet ebenfalls im Streamverfahren, wartet also im Inner-Loop nur darauf, daß die Flagvariable im Shared Memory für die eigene Session gesetzt wird. Das Submitfeld macht also nur folgendes: es nimmt die Nachricht entgegen, setzt das Flag im Shared Memory und schreibt den Nachrichtentext in die Datenbank. (der zusätzliche Weg über die Datenbank wird gewählt, damit der Einsatz von Shared Memory optional bleibt) Die Synchronisation der Lese- und Schreibzugriffe im Shared Memory wird über Semaphoren abgewickelt. Zum Resourcenverbrauch läßt sich folgendes sagen: bei Benutzung von Shared Memory sitzt phpChat praktisch 99% seiner Zeit im Idle-Loop. Dabei gibt phpChat die Kontrolle per sleep() zurück an das Betriebssystem, welches die Prozessorlast pro Apacheprozeß auf weniger als 0.1% auf einem Intel PentiumIII herunterschraubt. Till
php::bar PHP Wiki - Listenarchive