phpbar.de logo

Mailinglisten-Archive

[php] Re: [php] =?iso-8859-1?Q?Chat=2D=D6konomie?=

[php] Re: [php] =?iso-8859-1?Q?Chat=2D=D6konomie?=

=?iso-8859-1?Q?Andr=E9?= Temme a.temme_(at)_gmx.de
Thu, 15 Jun 2000 21:56:08 +0200


Till Gerken schrieb:
> 
> > Nun weiß ich, das einige PHP-Chats shared-memory-funktionen nutzen, um
[...]
> 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.

GROSSES Interesse! (techn. Umsetzung in PHP, Voraussetzungen,
Fallstricke ...)

[...]
> 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.

Mist, hatte ich erwähnt, daß ich Psychologe mit Programmierkenntnissen
bin, und nicht Informatiker? :) Was meinst du mit Inner-Loop? Die
Endlosschleife, die die Datenbankabfragen zur Ausgabe macht?

> 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.

Äh, krieg ich dazu noch eine genauere Erklärung? Über die Semaphoren bin
ich ja auch schon im Manual gestolpert, aber eben nur gestolpert!

> 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.

Und wonach richtet sich die Länge des sleep()?
Und, erkaufe ich mir die Senkung der Prozessorlast nicht mit höherem
Speicherbedarf? Sowas um die 2,5 MB / Client?

Vielen Dank schon mal für deine Antwort, aber wenn mir jemand noch was
zur konkreten PHP-Umsetzung sagen könnte, oder auf ein Tutorial o.ä.
verweisen könnte, dann erspart mir das locker 2 Wochen intermittierender
Testerei über Trial & Error, einer unter Nicht-Informatikern sehr
beliebten Programmiertechnik.
Um zu zeigen, daß ich nicht einfach abschreiben will, ich denke mal, es
müßte in etwa so gehen:

$shm_key = shm_attach($key);  // und wo kriege ich $key her?

// irgendwo gibt es eine Eingaberoutine
if($neue_nachricht != "")  // jemand chattet
{
  $chat_flag = 1;
  shm_put_var($shm_key, $key_chat_flag, $chat_flag);
}


// und irgendwo schaut irgendwer nach Neuigkeiten
if(shm_get_var($shm_key, $key_chat_flag == 1) )
{
  // löse MySQL-Abrage-Routine aus
}

// und wenn keiner mehr da ist:
shm_detach($shm_key);  // trennen
shm_remove($shm_key);  // speicher freigeben 
 


Und wofür sind jetzt die Semaphoren?
Gespannte Grüße an alle

Andre



php::bar PHP Wiki   -   Listenarchive