PHPスレッドと同期
-
11-10-2019 - |
質問
私はPHPに慣れていないので、始めるためにシングルトンを実装することにしました。
PHPでシングルトンパターンを再現することはできますが、ダブルチェックロックを実装する方法はわかりません。
PHPで可能/必要な/必要です。 PHPがマルチスレッドではないことをどこかで読みましたか?誰かがそれを確認できますか?
それがマルチスレッドの場合、誰かが私にPHPでどのようにlock()またはsynchronize()がどのように動作するかを説明できますか?
ありがとう、ヘンリー
解決
シェアノーミングアーキテクチャ
PHPには シェアノーミングアーキテクチャ:
- HTTPと同様に、各リクエストは異なります
- 共有データはデータストアレイヤーに押し下げられます
- フロントコントローラーを避けてください
これは私たちに与えます:
- バランスを読み込む能力
- あるデータセンターから別のデータセンターへの目に見えないフェールオーバー
- アプリケーションのより良いモジュール化
- 開発とデバッグが簡単です
ダブルチェックロック
しかし、ダブルチェックロックを実装する方法がわかりません。
一般に、データベース層がこれに責任を負います。 mysql(innodb)標準には行レベルがあります ロック(これに十分なはずです)。
INNODBは、行レベルでロックし、Oracleのスタイルでデフォルトでlockingしない一貫した読み取りとしてクエリを実行します。
これがSQLも十分でない場合、たとえば トランザクション これを実現するために。
書籍オンラインでは、トランザクションを「単一の論理単位として実行される一連の操作」と定義しています。
フォークプロセス
スライドのように、PHPにはシェアノーシングアーキテクチャ(従来)があります。これは、PHPには スレッド(モデル). 。コンパイルすることはできますが(デフォルトでは有効になっていません)サポートを受けるPHP フォーク 相互に通信できるプロセス。コンパイルするとき セマフォ機能 そうすれば、ようなことができます sem_acquire と SEM_RELEASE. 。しかし、一般に、これはPHPを適用しません。