7

静的メソッドとクラスはスケーラビリティに適していますか? 静的クラス/メソッドはアプリケーションのスケーラビリティを向上させ、インスタンス メソッドはあまりスケーリングしないと思います。可能な限り静的メソッドを記述することは、プログラミングの良い実践ですか?

4

8 に答える 8

11

静的メソッドとクラスはスケーラビリティに適していますか?

一方は他方とほとんど関係がありません。

静的クラス/メソッドはアプリケーションのスケーラビリティを向上させ、インスタンス メソッドはあまりスケーリングしないと思います。

違う。どうしてそう思うの?

可能な限り静的メソッドを記述することは、良いプログラミングの実践ですか?

いいえ。実際には、オブジェクト指向プログラミングの保守性の利点を放棄するため、これは非常に悪い習慣です。

于 2009-08-16T16:46:34.910 に答える
4

静的メソッドには、考慮すべき 3 つの問題があります。

  1. 静的メソッドに大きなクリティカル領域がある場合、ボトルネックが発生する可能性があります。もちろん、最大の方法は、メソッド全体が同期されていると宣言することです。一度に 1 つしか実行できない場合は、潜在的な問題です。
  2. 異なる VM や異なるマシンで同じメソッドを実行している場合、何をしていても一貫性がありますか? と
  3. 静的メソッドに依存するメソッドには、単体テストに関する問題があります。

一般的にベスト プラクティスとは見なされませんが、静的ヘルパー メソッドが一般的です。複雑すぎるため、おそらく別のアプローチを検討する必要があります。

于 2009-08-16T16:44:25.490 に答える
4

メソッドが静的である理由によって異なります。コンテキストが本当に必要ないために静的である場合、コンテキストが必要なために静的ではない同様の複雑なものと比較して、おそらく非常にうまくスケーリングされます。

ただし、必要なコンテキストを保持できず、それを渡す必要があるという理由だけで静的である場合、またはより多くの静的メソッドを持つという人為的な目標のために、実際には同等のメソッドよりもスケールが小さいと思われます。静的。

実際、ASP Classic はこの点を証明したと思います。

于 2009-08-16T16:51:53.163 に答える
3

本質的にスケーラビリティが向上しない静的メソッドはありません。実際、プログラミング スタイル (命令型またはオブジェクト指向) は、実際にはスケーリングに何の違いもありません。スケーリングには 2 つの主要な側面があり、スケーリングを改善するために何をすべきかは、どちらを意味するかによって異なります。

1 1 秒間に処理されるリクエスト数によるスケーリング

このタイプのスケーリングは、通常、システムの全体的なスループットを向上させるために、クラスターにコンピューターを追加することです。多くの場合、スケーリングの増加は、最初にキャッシュを使用して使用される共有リソースの量を減らし、その後データ アクセスをシャードに分割することです。

2 データのスケーリング

これは、システムが時間の経過とともにより多くのデータを取得し、アルゴリズムが O(1) よりも複雑になるため、データにアクセスする操作 (検索、フィルタリングなど) が遅くなる場合です。この場合、通常の戦略は、読み取りポイントと書き込みポイントの数を増やし、Map/Reduce などの並列アルゴリズムを使用することです。

ただし、これらの側面はどちらも、静的メソッドを使用するかどうかとは何の関係もありません。複数のリクエストが大量のデータ セットまたは単一のデータ ソースに対して機能するかどうかだけです。

于 2009-08-16T16:49:50.877 に答える
2

いいえ。各インスタンスにはメソッド定義の独自のコピーがあり、各インスタンスにその量のスペースを占有していると想定しているかもしれませんが、そうではありません。

追加する編集:

インスタンス間でインスタンス メソッドを実際にどのように共有できるか疑問に思っている場合: これは、インスタンス メソッドへの各呼び出しが暗黙的にインスタンス オブジェクトへの参照をメソッドに渡すためです。これは一般に「暗黙の this」と呼ばれます。つまり、myMethod(a, b) のように 2 つのパラメーターを持つインスタンス メソッドを定義または呼び出す場合、実際には myMethod(this, a, b) であると考えることができます。であり、明示的に定義したり渡したりしなくても、Java がこのパラメーターを処理します。

(ちなみに、これは Python では別の方法で処理されます。呼び出しではなくても、オブジェクト参照をインスタンス メソッド定義の最初のパラメーターとして明示的に配置する必要があります。)

Java バイトコード レベルで何が起こっているかの説明については、次のリンク を参照してください: http://www.artima.com/underthehood/invocationP.html方法。")

于 2009-08-16T16:48:53.123 に答える
1

あなたは間違った木を吠えていると思います:

現実の世界では、通常、スケーラビリティ (またはその欠如) は、アルゴリズムの適切さと、データ ストアに対して行われる操作の効率 (優れた SQL クエリを考えてください) から生じます。

メソッドが静的であるかどうか (または静的であるメソッドの割合) などは、通常、システムのスケーラビリティとは何の関係もありません。静的メソッドを使用しない超スケーラブルなシステム、または静的メソッドのみを使用する超スケーラブルなシステムを確実に作成できます。

于 2009-08-17T21:44:29.393 に答える
1

スケーラビリティのどの形式を意味しますか? 大小のプロジェクトでコードが保守可能で拡張可能であるスケーラビリティ? 次に、静的メソッドのみを使用すると問題が発生します。パフォーマンスのことですか?インスタンスメソッドが遅い場合 (私はこの一般性を信じていません)、これはスケーリングしないという意味ではありません。静的メソッドの 2 倍の時間が必要な場合、10000 回すべてを呼び出すと、2 倍の時間が必要になります。適切なアルゴリズムとデータ表現を選択することで、パフォーマンスのスケーラビリティが大きく左右されます。

最後に、静的メソッドが有効であると考える場合は、Java のようなオブジェクト指向言語を使用しないでください。C または Pascal または古典的な Basic-方言を試してください。

于 2009-08-16T16:49:13.453 に答える
0

反対票を投じました。OPは明らかにOOを完全には理解していません。インスタンス オブジェクトの作成時に、インスタンス メソッドが余分なスペースを占有することはありません。静的メソッドは、インスタンスの作成も回避しない限り、何も節約できません。その場合、オブジェクト指向言語が構築されたものから遠く離れてしまい、無意味な議論になります。

于 2009-08-17T21:37:01.153 に答える