2013-03-23 11 views
6

をティックしています私はランダムのようなものに出くわした:register_tick_functionで発見することができPHPが非ブロック

<?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); 
?> 

PHPでこれを使用するのがブロックされているかどうかを知りたかったですか?

EDIT: 私はもっとして1つのPHPティックランニングが同じスレッド上で起動している場合、私はこれの意味することは、それは他のダニを実行しながら、バックグラウンドでIOを処理することができるか、それはそれぞれのを待つ必要がありません制御を越えるためにはダニ?

答えて

2

ダニ機能がブロックされています。 PHPは一般的に、同じリクエストで(ネイティブに)パラレル実行をサポートしていません。そうではありません。バックグラウンドでIOを処理することはできません。

各ティック後にティック関数への呼び出しを多かれ少なかれ呼び出すことができます。それでは、あなたが得ることは、このようなものです:

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

そしてそれはちょうどそのように動作します:)

けれども、ちょうどので、あなたは、これは実際に重要であるかどうかを理解して:コールバックがJSで実行された場合(例えば、タイムアウト/イベントが発生した場合)、それはまるでブロッキングと同じです。

+0

私は完全にノンブロッキングであることを認識しています。私は少し質問をした方がいいでしょう。これを反映するように質問を更新しました。 – WojonsTech

+0

@WojonsTech申し訳ありませんが、あなたは何を意味するのか分かりません。 tick関数はPHPの他の関数と同様にブロックされます。そうではありませんが、他のティックが実行されている間、彼らはIOを待つことができません。 – NikiC

+0

あなたが私の質問に答えてくれたようにうまくいっているようですが、ティックの機能は、 – WojonsTech

関連する問題