2012-10-09 20 views
6

PHP supporta ora una classe Thread. Esiste anche una classe e Cond. Bisogna comunque compilarlo con le buone opzioni e aggiungere un'estensione PECL per averlo.Come utilizzare PHP // Thread // Mutex // Cond

Esiste un buon tutorial da cui iniziare? Qualcosa che mostra chiaramente l'uso corretto di ogni Classe/Metodo.

Semplicemente non so come gestire queste lezioni. Avrei bisogno di alcuni esempi concreti di fare cose molto semplici che mostrino quanti più metodi possibili.

Grazie.

+0

Non è ancora stato rilasciato. Gli sviluppatori PHP potrebbero probabilmente aiutarti di più. – Ryan

risposta

14

E 'stato rilasciato come è accessibile PECL, Download Windows sulle pagine GitHub ... Git (sorgente), se possibile, il codice più recente ...

http://pthreads.org contiene qualche informazione in più, e nella verifica gli esempi cartella di troppo ...

Se siete più preciso in quello che è necessario fare posso fornire una risposta precisa, non esitate a contattarmi direttamente ...

Ci scusiamo per la mancanza di documentazione, sono sviluppo aggressivo di pthreads in quel poco tempo che ho in giro lavoro - è stato scritto mentre ero in vacanza dal lavoro e Ora sono di nuovo al lavoro: la documentazione verrà aggiornata il più possibile non appena ne avrò il tempo.

Il threading è in genere una cosa complicata, ma non è necessario ... avere mai visto un pool di thread inferiore a 100 righe ?? https://github.com/krakjoe/pthreads/blob/master/examples/Pooling.php ... ce n'è uno !!

Non avete bisogno di informazioni su condizioni o mutex per operare le discussioni in PHP, pthreads include Easy Peasy tutto ...

saltare a bordo, senza dubbio, lo farò perfetto è ...

+0

Questo era totalmente ciò che cercavo, grazie. Non esiterò a contattarti non appena necessario. – dader

+1

Il pthread funziona all'interno di apache? se sì, dovrei prendere il mpm-prefork o mpm-worker? – dader

+0

Funziona in ogni ambiente SAPI, fai la tua scelta. –

1

La filettatura non è facile, in qualsiasi lingua. Ci vuole un diverso treno di pensieri (non lineare). Dato che quello che hai menzionato non è disponibile in nessuna versione rilasciata di PHP, ti consiglio di giocare con la funzionalità pctnl e shmop. In particolare pcntl_fork. Entrambi sono stati circa un po 'e sono supportati. È multiprocessing e non threading, ma può realizzare ciò che stai cercando. Ma il threading è più efficiente.

In genere si utilizza la biforcazione per avere un controllo del processo genitore per lavoro, delegarlo a un processo biforcato e quindi verificare più lavoro mentre il processo figlio esegue il lavoro. Il processo genitore può controllare lo stato dei processi figli. Ad esempio, puoi assicurarti di puntare solo un certo numero di processi figli e aspettare che uno completi prima di biforcarne un altro.

Ho avviato fino a 500 processi e il carico della CPU ha raggiunto il livello massimo. Il processo padre controllerebbe il carico del sistema e non si fermerebbe più se il carico fosse troppo alto.

Se è davvero necessario, è possibile utilizzare la memoria condivisa (funzioni shmop) con biforcazione per ottenere gran parte delle funzionalità che si otterrebbero con il threading.

+1

grazie per la tua risposta. Ho già giocato con pcntl_fork, e fa parte del lavoro, ma mi sembra che il threading mi salverà il sovraccarico della comunicazione tra processi (supponendo che il threading offra ottime possibilità di condivisione delle variabili tra i vari thread, ho sbagliato ?).Soprattutto, penso, quando uso oggetti immutabili (di nuovo, sbaglio?). – dader

+0

Sei corretto, i thread ti fanno risparmiare. È possibile eseguire la "condivisione delle variabili" con le funzioni di memoria condivisa senza thread. Onestamente, se stai cercando di fare il threading e preoccuparti del sovraccarico dei processi, probabilmente dovresti considerare una lingua oltre a PHP. –

+0

Sono assolutamente d'accordo con te, PHP è lontano dall'essere una scelta per questo compito. – dader