2012-12-24 7 views
6

Mentre si esegue un ciclo infinito in PHP su Apache, altre pagine/script si bloccano (impiegano un tempo per caricarsi) finché non interrompo l'esecuzione dello script. Tuttavia, altre pagine continuerebbero ad essere eseguite su una sessione utente o browser diversa. Questo può essere risolto?Il ciclo infinito PHP impedisce l'accesso ad altri script?

+0

Quante CPU ci sono nella vostra macchina? Quanti thread sono in esecuzione in Apache? Avrei pensato che più script sarebbero stati in grado di funzionare contemporaneamente, in generale. Forse hai bisogno di: http://httpd.apache.org/docs/2.2/mod/worker.html (Sto assumendo che il tuo "infinito" sia solo un "while (1);" o alcuni di essi, e non qualcosa di più complesso che potrebbe causare conflitti di blocco con il tuo main.php) –

+0

Il tuo script infinito richiede sessioni? In caso contrario, è possibile eseguirlo dalla riga di comando. Anche se php potrebbe non essere lo strumento giusto per mantenere un programma in esecuzione ... – jeroen

+1

Si potrebbe provare a utilizzare un ID di sessione dedicato/speciale per il tuo script in esecuzione infinita. Assicurati che non possa scontrarsi con il tuo normale ID di sessione – jeroen

risposta

4

Questo è un problema di condizioni di gara.

Una volta effettuata la sessione, un file allegato all'ID di sessione viene aperto con autorizzazioni restrittive (bloccato per la lettura e la scrittura). Se viene chiamato un altro session_start(), attenderà il sblocco del file di sessione, per evitare che il secondo script modifichi in modo asincrono la sessione.

Dai un'occhiata a this article che spiegano meglio di me cosa succede.

+4

Questa non è la definizione di una "condizione di competizione", è una semplice risorsa bloccata. Risposta corretta però. – deceze

Problemi correlati