2013-03-23 10 views
6

mi è venuto in modo casuale attraverso le cose come:Sono php zecche non-blocking

<?php 
    declare(ticks=1); 

    // using a function as the callback 
    register_tick_function('my_function', true); 

    // using an object->method 
    $object = new my_class(); 
    register_tick_function(array(&$object, 'my_method'), true); 
?> 

che si trova a register_tick_function.

Volevo sapere se l'utilizzo di questo in php stava bloccando o no?

EDIT: Cosa voglio dire con questo se ho più di un php tick in esecuzione avviato sullo stesso thread è in grado di gestire IO in background mentre le altre zecche corrono o ha bisogno di aspettare per ogni spuntare per dare il controllo eccessivo?

risposta

2

Le funzioni di blocco stanno bloccando. PHP in generale non (nativamente) supporta l'esecuzione parallela nella stessa richiesta. Quindi no, non sarai in grado di gestire l'IO in background o qualcosa di simile.

Ciò che le zecche fa è più o meno l'inserimento di chiamate alla funzione di spunta dopo ogni istruzione. Quindi, quello che si ottiene è qualcosa di simile:

tick(); 
$a = 1; 
tick(); 
$b = 2; 
tick(); 
// ... 

E si comporterà proprio come quella :)

Anche se, proprio in modo da capire se questo è in realtà significativa: Quando un callback viene eseguito in JS (ad esempio un timeout/evento viene attivato), quindi è proprio come il blocco.

+0

Sono assolutamente consapevole del non blocco e avrei dovuto porre la domanda un po 'meglio, ho aggiornato le domande per riflettere questo. – WojonsTech

+0

@WojonsTech Spiacente, non capisco cosa intendi. Le funzioni di spunta sono bloccanti come qualsiasi altra funzione in PHP. Quindi no, non possono aspettare IO mentre altri ticks vengono eseguiti, o qualcosa del genere. – NikiC

+0

questo va bene sembra che tu abbia risposto alla mia domanda, praticamente la funzione tick non salta intorno ai tick mentre sono inattivi li gestisce in ordine – WojonsTech