ホームページ > バックエンド開発 > PHPチュートリアル > 常識を覆す -- 無限ループ構造のコードには、ループの外でロジックを実行する機会もあります。

常識を覆す -- 無限ループ構造のコードには、ループの外でロジックを実行する機会もあります。

WBOY
リリース: 2016-06-23 14:13:10
オリジナル
1082 人が閲覧しました


class ZookeeperDemo extends Zookeeper {

public function watcher($i, $type, $key) {
echo "Insider Watchern"

// Watcher が消費されるため、新しい Watchern を設定する必要があります。
$this->get( '/test', array($this, 'watcher' ) );
}
}

$zoo = new ZookeeperDemo('127.0.0.1:2181'); >get( '/test', array($zoo, 'watcher' ) );

while( true ) {
echo '.';


次に、スクリプトを実行します。

$ php Zookeeperdemo1.php
ここで 2 秒ごとにポイントが生成されるはずです。次に、ZooKeeper クライアントに切り替えて、「/test」値を更新します。

[zk: 127.0.0.1:2181(CONNECTED) 20] set /test foo
これにより、PHP スクリプトで「Insider Watcher」メッセージが静かにトリガーされます。


どうしてこんなことが起こったのでしょうか? while 構造に入った後も、ウォッチャー メソッドが実行できるのはなぜですか?読者の皆様、コメントください。





ディスカッションへの返信(解決策)

分散アプリケーション?
ZooKeeper は、単純なプリミティブのセットを含む、Hadoop および Hbase の重要なコンポーネントである分散型オープンソース分散アプリケーション調整サービスです。現在、Java および C インターフェイスを提供しています。

常識を覆すと言っているのは理解できます


私は配布について話しているのではありません、配布は単に私のビジネスニーズにすぎません。

破壊版は --

PHP では、無限ループ構造は、ループとは明らかに無関係なループの外でロジックを実行する機会があります -- これはマルチスレッドの現れです -- したがって、この動物園の管理人は拡張機能はマルチスレッドに基づいています。このメソッドは php 環境で実行されます。

Watcher は消費されるので、新しいものを設定する必要があります
これを行うときは、あなたが私よりもよく知っているはずです

php Zookeeper は常に php の動作を監視しています


私はこれを実行しません、これを実行する予定だっただけです。

つまり、誰かが PHP コードを書いてデバッグし、無限ループの過程で、そのループと何の関係もないコードが実行される可能性があることに気付いたら、驚くべきことではないでしょうか?

メインスレッドが無限ループしている間、サブスレッドがタスクを実行し続けるのは正常ではないでしょうか?

php には、実行のために複数のプロセスをフォークできる pcntl があります

それは間違いなくフォークではありません

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート