2008-09-15 6 views
2

Ich finde mich relativ fortgeschrittenen Sachen mit Memcached in PHP. Es wird zu einem mentalen Kampf, über Rassen- und Nebenläufigkeitsprobleme nachzudenken und diese zu lösen, die durch die blockierungsfreie Natur des Caches verursacht werden.Tools zum Testen/Debuggen/Fixieren von PHP Concurrency-Problemen?

PHP scheint ziemlich schlecht in Tools zu sein, wenn es um Gleichzeitigkeit geht (Threads, irgendjemand?), Also frage ich mich, ob es irgendwelche Lösungen gibt, diese richtig zu testen/zu debuggen.

Ich möchte nicht warten, bis zwei Benutzer zwei Skripts anfordern, die gleichzeitig als parallele Prozesse ausgeführt werden und ein Nebenläufigkeitsproblem verursachen, das mich am Kopf kratzen lässt oder das ich erst bei Schneebällen bemerken werde in ein Clusterfsck.

Irgendwelche magische PHP Nebenläufigkeit Zauberstab, den ich wissen sollte?

Antwort

0

Nicht speziell für dieses Problem aber: FirePHP?

+0

Für diesen speziellen Fall bevorzuge ich meine aktuelle dateibasierte Logging-System mit genauen Zeitstempeln, die bei der Bestimmung, was wann ausgeführt wurde, helfen kann. – Gilles

3

PHP ist keine Sprache für Multithreading, und ich glaube nicht, dass es jemals so sein wird.

Wenn Sie Mutex-Funktionalität benötigen, hat PHP eine Semaphore Funktionen, die Sie in zusammenstellen können.

Memcache keine Mutex Fähigkeit hat, aber es kann mit dem Memcache::add() Methode emuliert werden.

Wenn Sie eine MySQL-Datenbank verwenden und versuchen, eine Art von Race-Condition-Korruption zu verhindern, können Sie die lock tables-Anweisung verwenden oder transactions verwenden.

+0

Danke für die Hinweise! Ich bin immer noch auf der Suche nach etwas in der Testabteilung, anstatt der Implementierung Sicherheitsnetze hinzuzufügen, ohne sie tatsächlich in einer realen Situation zu testen. Zum Beispiel ist es cool, Semaphore zu machen, aber was ist der Punkt, wenn es nicht richtig getestet werden kann? – Gilles

+0

Ich habe begonnen Memcache zu verwenden: fügen Sie dank Ihres Rates hinzu und ich bin ein glücklicher Camper. – Gilles

1

Sie könnten versuchen, Ihren Code mit einem Lasttest-Tool zu stampfen, das mehrere Anfragen gleichzeitig ausführen kann. Jmeter kommt in den Sinn.