ホームページ  >  記事  >  バックエンド開発  >  静的変数と同時実行性について

静的変数と同時実行性について

WBOY
WBOYオリジナル
2016-08-18 09:16:011915ブラウズ

今日突然思いついた質問なのですが、静的変数についてなのですが、前任のマネージャーもプログラム中では静的キーワードは極力使わないほうがいいと言ってました。
これが私が今理解している方法です。なぜなら、私は同時実行性の概念を以前に見たからです。静的とは、一般に、すべてのオブジェクトが共同所有されることを意味します。それは、同時実行状況では、複数のユーザーがいくつかの変数を共同所有することを意味するのではありませんか。このように、各ユーザーが購入したアイテムの数を区別することはできませんが、一般的な意味は、すべてのオブジェクトが一緒に所有されているということです。では、どのオブジェクトであるかを区別する必要はありません。私の質問に答えてくれる人、または実際の応用シナリオを教えてくれる人はいますか? もう一度よろしくお願いします

返信内容:

今日突然思いついた質問なのですが、静的変数についてなのですが、前任のマネージャーもプログラム中では静的キーワードは極力使わないほうがいいと言ってました。
これが私が今理解している方法です。なぜなら、私は同時実行性の概念を以前に見たからです。静的とは、一般に、すべてのオブジェクトが共同所有されることを意味します。それは、同時実行状況では、複数のユーザーがいくつかの変数を共同所有することを意味するのではありませんか。このように、各ユーザーが購入したアイテムの数を区別することはできませんが、一般的な意味は、すべてのオブジェクトが一緒に所有されているということです。では、どのオブジェクトであるかを区別する必要はありません。私の質問に答えてくれる人、または実際の応用シナリオを教えてくれる人はいますか? もう一度よろしくお願いします

あなたの理解に何か間違っていると思います:
まず第一に: 各 http リクエストについて、たとえば、nginx リバース プロキシを介して fastcgi サーバーに送信されると、異なるリクエストが異なる php-fpm プロセスで解析され実行され、各プロセス (システムリソースの割り当てとスケジューリングの基本単位は、相互に干渉することなく排他的なメモリです。
第二に、静的な静的属性は、スクリプトの実行時に直接メモリ (ヒープ) にロードされます (理論的には、オブジェクトを作成するよりも優れています。そして属性を呼び出します) 高効率)
つまり、この静的属性は同時実行とは関係ありませんが、静的属性を適切に使用すると理論的にはスクリプトの実行速度が向上するため、スクリプト ユニットの実行時間が短縮されます。これにより、同時実行時のシステムのパフォーマンスが向上します。

おまけ: phpの同時実行数は理論的にはphp-fpmのプロセス数に依存します

static はオブジェクトではなくクラスによって保持されます。この時点では、クラスはインスタンス化されておらず、すべてのオブジェクトはおろか、オブジェクトも存在しません。

静的変数はクラス属性であり、このクラスのすべてのオブジェクトが共有されることを意味します。たとえば、全国のユーザーがこの列車の乗車券を購入できるようになります。電車の切符の残り枚数を確認するには投票はどこにありますか?実装の 1 つは静的変数を通じて実現できます。電車のチケットの残り枚数を静的に定義します。誰かがチケット(別のオブジェクト)を購入するたびに、属性が同期的に変更されます(静的 - 1)
静的キーワードの意味を確認できます

ちょっと不親切な言葉を言わせてください。
あなたが採用した答えは何と言っていますか?回答を受け入れる前に、ご自身の判断で判断していただく必要があると思います。
または、これを行う前にまずドキュメントを読んでください。

@TIGERB の正しい声明により、それが非常に明確になりました。

各 HTTP リクエストは排他的メモリに保存されます

static は実際には同時実行性とは何の関係もありません。改めてTIGERBの言葉を引用します

しかし、静的属性を適切に使用すると、理論的にはスクリプトの実行速度が向上します

また、この理論的な改善についてあまり考える必要がないことも明らかです。
さらに考慮すべき同時実行性
1 ネットワーク IO (http リクエスト、TCP、IP ハンドシェイク時間)。
2 データベース IO、同時読み取りと書き込みはブロックされます。大量のデータには正しく適切なインデックスを使用し、読み取りと書き込みを分離します。
3 キャッシュを使用します。
4 待ってください。
これらはこの静的行為とは何の関係もありません。

最後の質問に答えてください:

または実用的なアプリケーションシナリオを提供してください

その前に、対象者は PHP の static、$this、self の違いを理解する必要があると思います。

たとえば、静的はデザインパターン、つまり静的ファクトリーパターンで使用できます。特定のデザイン パターンについては、主題は他の人の記事を参照できます。

最後に違いについて話しましょう:

リーリー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。