Mailinglisten-Archive |
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