私はPHPが初めてなので、始めるためにシングルトンを実装することにしました。
PHP でシングルトン パターンを再現することはできますが、ダブルチェック ロックを実装する方法がわかりません。
それはPHPでも可能/必要ですか。PHP がマルチスレッド化されていないことをどこかで読んだことがありますか? 誰かがそれを確認できますか?
マルチスレッドの場合、PHP で lock() または synchronize() がどのように機能するかを誰かに説明してもらえますか?
ありがとう、ヘンリー
私はPHPが初めてなので、始めるためにシングルトンを実装することにしました。
PHP でシングルトン パターンを再現することはできますが、ダブルチェック ロックを実装する方法がわかりません。
それはPHPでも可能/必要ですか。PHP がマルチスレッド化されていないことをどこかで読んだことがありますか? 誰かがそれを確認できますか?
マルチスレッドの場合、PHP で lock() または synchronize() がどのように機能するかを誰かに説明してもらえますか?
ありがとう、ヘンリー
PHP にはシェアナッシング アーキテクチャがあります。
- HTTP と同様に、各リクエストは個別です
- 共有データはデータストア レイヤーにプッシュ ダウンされます
- フロントコントローラーを避ける
これにより、次のことがわかります。
- ロードバランス機能
- あるデータセンターから別のデータセンターへの目に見えないフェールオーバー
- アプリケーションのより良いモジュール化
- 開発とデバッグが容易
しかし、二重チェックのロックを実装する方法がわかりません。
一般に、データベース層がこれを担当します。MySQL(innodb)標準には、たとえば行レベルのロックがあります(これで十分なはずです)。
InnoDB は行レベルでロックを行い、デフォルトでは、Oracle のスタイルで非ロックの一貫した読み取りとしてクエリを実行します。
これが十分でない場合、SQL には、たとえばこれを実現するためのトランザクションもあります。
Books Online では、トランザクションを「単一の論理的な作業単位として実行される一連の操作」と定義しています。
スライドのように、PHP には Share-nothing-Architecture(traditional) があり、これは PHP にthread(model)がないことも意味します。相互に通信できるforkプロセスをサポートするように PHP をコンパイルすることはできますが (デフォルトでは有効になっていません)。セマフォ関数もコンパイルすると、 sem_acquireやsem_releaseなどを実行できます。しかし、一般的にこれは PHP には当てはまりません。