3

startProcess();の実行を停止せずに、関数が呼び出されていることを確認するにはどうすればよいですかmyFunction()。関数を呼び出してその値を返さないようにして、これを達成する方法があると思いますか?

擬似コード:

function myFunction() {

    startProcess();

    return $something;       
}

function startProcess() {
    sleep(5);
    // Do stuff that user doesn't should have to wait for.
}
4

6 に答える 6

5

あなたはそれをすることはできません。PHP には非同期 I/O を許可する関数がいくつかありますが、必要な同時実行性に匹敵するものはありません。

既存の言語サポートがない理由は、PHP が短命のスクリプトを実行するように設計されているのに対し、並行性は HTTP デーモンによって管理されているためです。

以下も参照してください。

于 2010-06-01T18:17:54.720 に答える
3

Artefecto の回答に少し補足すると、ある種のスレッド状況を再現しようとした人が何人かいます。Google を使用していくつかの情報を見つけることができますが、あまりにも実験的で、おそらくかなり信頼性が低いため、役立つとは思えません。

役立つリンクが 1 つ見つかりました。

于 2010-06-01T18:21:00.127 に答える
1

この種のバックグラウンド タスクを実行するためにGearmanを見たことがありますか?

于 2010-06-01T20:20:10.333 に答える
1

startProcess() に何をさせたいですか? ユーザーを待たせないようにする方法はたくさんあります。

メールが良い例です。mail() を実行するスレッドは、メッセージが受け入れられるか拒否されるまでスピンします。ユーザーがそれを待つ必要はありません。したがって、タスクをキューに入れ、cron でキューを処理します。

function myFunction() {
    addToQueue();
    return $something;       
}

function addToQueue() {
    // add stuff to the queue of tasks
}

function runQueue() {
    // process the queue of tasks; called by cron.
}
于 2010-06-01T19:32:26.657 に答える
1

ここでは暗闇で撮影しますが、この機能は全体的な目標の解決策になるように見えますか?

http://php.net/manual/en/function.register-shutdown-function.php

于 2010-06-01T21:41:32.620 に答える
1

あなたの質問とタグからわかる限り、バックグラウンド処理、つまり基本的に複数のスレッドを実行したいと考えています。

残念ながら、PHP はこれを行いません。非同期の IO 関数もいくつかありますが、一般的に PHP では並行処理を行うことはできません。

于 2010-06-01T18:19:27.277 に答える