2016-05-26 1 views
0

同じ静的メソッドが2つの並列スレッドによって呼び出されるとどうなりますか?静的メソッドの2つの並行呼び出しがPHPに存在しますか?

1つのスレッドを待機させるか、静的メソッドの2つの並列インスタンスが存在する可能性がありますか?

メンバー変数を使用せず、ローカル変数のみを使用すると仮定します。

例:

<?php 

    public class ClassName{ 

     public static function doStuff(){ 
      // Function code goes here 
     } 
    } 

?> 

は、この機能がサーバにGET requestによって呼び出されると仮定します。次に、2人のユーザーが同じ時刻に正確にURLに電話をかけた場合、どうなりますか?

+0

あなたは少し抽象ですが、より多くの情報を提供することができます。 PHPの並行処理は多くの点で解釈される可能性があります –

+0

私は例を追加しました –

+0

どのように並行処理を作成しますか?同じPHPスクリプトを同時に2回呼び出すことでまたはPCTNLでフォークを使用することを参照してください。http://php.net/manual/en/book.pcntl.php –

答えて

1

必要な情報については、Confirmation that PHP static variables do not persist across requestsを参照してください。

標準のPHPは、ロックや待機を行いません。それはメソッドを実行するだけで、2つの別個の要求は互いに知られておらず、それぞれの他のメモリにアクセスすることはできません(この場合)。

これは競合状態です。どのリクエストが最初に処理されるかによって異なります。 httpリクエストはWebサーバーによって処理され、Webサーバーはphpスクリプトを処理するPHPプロセスを生成します。

+0

スレッドについてはどうですか? (同じプロセス内の2つのスレッドとスクリプトは同じ静的なものにアクセスします) – DanFromGermany

+0

pctnl_fork(http://php.net/manual/en/function.pcntl-fork.php)でスレッドを使用すると、現在のプロセスメモリがわかります現在の状態がコピーされるようにコピーされます。親プロセスの静的変数を変更すると、分岐した子の静的変数は変更されません。その他の並行処理の種類については、マニュアルを参照してください:http://php.net/manual/en/refs.fileprocess.process.php より良い回答: http://stackoverflow.com/questions/17274011/php-sharing -a-static-variable-between-threads –

+0

pcntlはスレッドではなく新しいプロセスをフォークします。スレッドは静的なメモリ部分を共有しているとは思いますが、わかりません。それは私が尋ねる理由です。 – DanFromGermany

関連する問題