phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?Re:_=5Bphp=5D_Chat-=D6konomie?=

[php] =?iso-8859-1?Q?Re:_=5Bphp=5D_Chat-=D6konomie?=

Till Gerken till_(at)_phpwebdev.com
Thu, 15 Jun 2000 17:22:39 +0200


> 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