PHP-Skripte Sequentiell oder Parallel abgearbeitet?

Alles, was den Apache betrifft, kann hier besprochen werden.

PHP-Skripte Sequentiell oder Parallel abgearbeitet?

Postby Mrhiccup » 16. March 2006 19:01

Moin,

also ich möchte eine Webseite machen in der man über ein Formular einen Datensatz bearbeiten kann.

Es sollen nicht 2 Leute gleichzeitig einen Datensatz bearbeiten können. Einfach könnte es gehen, einen Vermerk in den Datensatz zu schreiben in dem steht, ob ein Datensatz gesperrt ist. Wenn er gesperrt ist, dann wird die Anfrage des 2. Benutzers abgelehnt.

Das sollte klappen wenn die Seiten-Aufrufe vom Webserver streng sequentiell abgearbeitet werden.

Daher ist meine Frage, ob der Apache Webserver mit PHP die Seitenaufrufe sequentiell abarbeitet oder nicht?
Mrhiccup
 
Posts: 2
Joined: 16. March 2006 18:48

Postby KingCrunch » 17. March 2006 00:50

Jein. PHP an sich wird "sequentiell" abarbeitet. Verschiedene Aufrufe hingegen bekommen ihrn eigenen Thread, laufen also Parallel.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby lumi » 17. March 2006 07:15

das problem lässt sich doch einfach mit der datenbank lösen. egal wieviele auf den datensatz zugreifen wollen, der erste schreibt einen wert in die datenbank der bei jeder abfrage abgerufen wird. steht der auf 1 , dann ist der datensatz gesperrt und die anderen müssen warten. beim speichern des datensatzes wird dann der wert wieder auf z.b. 0 gesetzt. das sollte so gehen, unabhängig davon wie php arbeitet.

gruß,
lumi
Image
lumi
 
Posts: 9
Joined: 02. March 2006 06:10

Postby Mrhiccup » 17. March 2006 16:18

Leider ist da nicht so einfach wenn jeder Aufruf einen eigenen Thread bekommt.
Wir haben dann 2 verschiedene Ausführungsfolgen die sich beliebeig abwechseln können.
So ist es zum Beispiel möglich, daß Thread 1 schaut ob der Datensatz gesperrt ist und sieht das er noch frei ist. Dann wird er unterbrochen und Thread 2 kommt dran. Der schaut ob der Datensatz gesperrt ist. Er sieht das er nicht gesperrt ist. Sperrt ihn und stellt den Inhalt auf dem Bildschirm dar. Jetzt kommt Thread 1 wieder dran. Der macht genau da weiter wo er aufgehört hat. Er stellt also auch den Inhalt des Datensatzes dar, denn er denkt ja das der Datensatz nicht gesperrt ist.

Und jetzt haben wir den Salat.
Mrhiccup
 
Posts: 2
Joined: 16. March 2006 18:48

Postby KingCrunch » 17. March 2006 16:37

Machs als Script: Ist der Wert 1 wird einfach ne Seite ausgegeben "Bearbeitung zur Zeit nicht erlaubt".
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Knight1 » 17. March 2006 19:05

Da muss man nicht einmal ein Flag setzen um eine Tabelle zu sperren.
Es gibt einen entsprechenden MySQL-Befehl um Tabellen in MySQL zu sperren: Guckst Du in MySQL-Manual (Leider nur in Englisch)


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby thorsin » 18. March 2006 14:19

oder du nimmst lighttpd, weil single-threaded ;-)
User avatar
thorsin
 
Posts: 136
Joined: 05. March 2006 20:39


Return to Apache

Who is online

Users browsing this forum: No registered users and 30 guests