私はPHPでpcntl_fork
を混同しています。pcntl_forkはどのようにPHPで動作しますか?
私はそれがマルチスレッドをしていることは知っていますが、それはどのように機能し、どのようにスクリプトで使用しますか?
私はPHPでpcntl_fork
を混同しています。pcntl_forkはどのようにPHPで動作しますか?
私はそれがマルチスレッドをしていることは知っていますが、それはどのように機能し、どのようにスクリプトで使用しますか?
PCNTLはスレッドを作成できません。それは現在のPHPプロセスを "フォーク"するだけです。どういう意味ですか? pcntl_fork()
に電話すると、現在のプロセスは2つのプロセスに分割されます。親プロセスの名前空間全体が子プロセスにコピーされ、両方のプロセスが1つの差異と並行して実行を継続します。pcntl_fork()
は親のPIDを返し、子プロセスは0
を返します。
いくつかのヒントが:
MySQL server has gone away
のようなエラーが発生します。ここでは、例from documentationです:
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
しかし、覚えて、PHPは言語だけをスクリプトされます。これは並列計算用に設計されたものではありません。必要に応じて、CRON、メッセージキュー、または下位言語のプログラムを同時に実行すると、より良い仕事をすることができます。
フォークされたPHPプログラムは、読み込み、理解、デバッグが非常に難しいです。そのプログラムを維持することは悪夢になるでしょう。
間違えたり、フォークを避けたりしないでください。あなたはそれを必要としません。本当に必要なのは、非同期タスクランナーです。グッドニュース、RabbitMQとnice tutorialがある;-)またRabbitMQのライブラリを約束してみてくださいPS Bunny
と呼ばれる:代わりにフォークのメッセージキューを使用すると、あなたに1つ以上という利点があります。複数のサーバーでキューを処理し、トラフィックが増加するにつれて水平方向に拡大縮小することができます。
ありがとうございました。 –
参照http://stackoverflow.com/q/19546588/632951 – Pacerier