wake-up-neo.net

WordPress und Multithreading

Ich arbeite an einem Plugin. Ich habe eine API erstellt, die eine benutzerdefinierte Tabelle in der Datenbank liest und in diese schreibt. Diese API kann möglicherweise von N Clients gleichzeitig aufgerufen werden (und das passiert wirklich). Mir ist aufgefallen, dass in diesem Fall Probleme auftreten. Um ein konkretes Beispiel zu geben:

if (is_null($wpdb->get_var("SELECT column FROM my_table_name WHERE condition"))) {
    // branch 1
}
else {
    // branch 2
}

In der Verzweigung 1 nehme ich unschuldig an, dass die aus der DB erhaltene Variable NULL ist, aber vielleicht ist dies nicht mehr wahr, weil sie von einem anderen Thread geändert wurde. Ich brauche die Garantie, dass sich diese Bedingung zumindest bis zum Ende von Zweig 1 nicht geändert hat.

Was ist der WordPress-Weg, um dieses Problem zu lösen? Semaphoren, Dateisperrung, MySQL LOCK TABLE? Oder gibt es bessere Lösungen? Ich habe lange im Internet gesucht, aber ich konnte nichts Bestimmtes finden. Wie funktioniert WordPress selbst (oder die Haupt-Plugins) in einem solchen Fall?

5
User

Ist Ihr Plugin für die Verwendung durch andere bestimmt oder wird es nur auf Servern verwendet, die Sie steuern? Wenn dies der Fall ist, gibt es möglicherweise einige Möglichkeiten, um das zu erreichen, was Sie möchten. Zum Beispiel die Sync-Erweiterung . Ich denke, dass Sie mit einem Mutex oder Semaphor ein Flag setzen können, das Sie dann in Ihren Lese-/Schreibfunktionen verwenden können.

Wenn Sie bereits über einen Memcache verfügen, ist dies möglicherweise eine einfache Möglichkeit, das Gleiche zu tun, ohne eine neue Erweiterung installieren zu müssen.

Andernfalls können Sie möglicherweise eine DB-Tabellensperre verwenden, aber das scheint wirklich schwerfällig zu sein, und ich würde mir Sorgen über die Auswirkungen auf die Datenbankleistung machen.

1
Dougal Campbell