質問

私はPHPに慣れていないので、始めるためにシングルトンを実装することにしました。

PHPでシングルトンパターンを再現することはできますが、ダブルチェックロックを実装する方法はわかりません。

PHPで可能/必要な/必要です。 PHPがマルチスレッドではないことをどこかで読みましたか?誰かがそれを確認できますか?

それがマルチスレッドの場合、誰かが私にPHPでどのようにlock()またはsynchronize()がどのように動作するかを説明できますか?

ありがとう、ヘンリー

役に立ちましたか?

解決

シェアノーミングアーキテクチャ

PHPには シェアノーミングアーキテクチャ:

  • HTTPと同様に、各リクエストは異なります
  • 共有データはデータストアレイヤーに押し下げられます
  • フロントコントローラーを避けてください

これは私たちに与えます:

  • バランスを読み込む能力
  • あるデータセンターから別のデータセンターへの目に見えないフェールオーバー
  • アプリケーションのより良いモジュール化
  • 開発とデバッグが簡単です

ダブルチェックロック

しかし、ダブルチェックロックを実装する方法がわかりません。

一般に、データベース層がこれに責任を負います。 mysql(innodb)標準には行レベルがあります ロック(これに十分なはずです)。

INNODBは、行レベルでロックし、Oracleのスタイルでデフォルトでlockingしない一貫した読み取りとしてクエリを実行します。

これがSQLも十分でない場合、たとえば トランザクション これを実現するために。

書籍オンラインでは、トランザクションを「単一の論理単位として実行される一連の操作」と定義しています。

フォークプロセス

スライドのように、PHPにはシェアノーシングアーキテクチャ(従来)があります。これは、PHPには スレッド(モデル). 。コンパイルすることはできますが(デフォルトでは有効になっていません)サポートを受けるPHP フォーク 相互に通信できるプロセス。コンパイルするとき セマフォ機能 そうすれば、ようなことができます sem_acquireSEM_RELEASE. 。しかし、一般に、これはPHPを適用しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top