この質問を読んでいました Static method behavior in multi-threaded environment in java
しかし、この質問はマルチコアプロセッサ環境には、同じ与えられた時間で同じ方法を実行することができ、マルチスレッドに答えていませんでした。
私のタイトルの質問が「はい」の場合、私のコンピュータはこれをどのように正確に実装していますか?呼び出されるのを待っているスタティックメソッドが1つしかないためです。
2つのコアはそれぞれ、その静的メソッドをコアのラムにコピーし、同時に実行しますか?
私は明確にその点を表現しているかどうかわかりません。もしそうでなければ、私はそれを説明する以上に喜んでいる。ありがとうございました。マルチコアプロセッサ環境では、同時に同じ静的メソッドを実行する複数のスレッドがある可能性があります
答えて
コードを独立して実行するために必要なすべての情報は、スレッドにローカルに格納されます。コアがメソッドを実行するとき、スレッドのコンテキストでそれが実行されます。実際の実行可能コードは変更できません(書き込み可能ではありません)ので、どこにでもコピーする必要はありません。スレッド/コア間で共有することができます。
メソッドはローカル変数を持つことができます。これらは、スレッドのプロパティであるスタックに格納されます。各スレッドはそのスタックのために別々のメモリを持っているので、各コアはローカル変数の異なるメモリにアクセスします。
ヒープに関するデータの場合、これは共有されているため、マルチスレッド環境では、アクセスを調整することによってアクセスする際に注意が必要です(たとえば、を使用)。
静的であるか静的でないかは関係ありません。どちらの場合でも、コードのコピーは1つだけです。非静的メソッドはオブジェクトの複数のインスタンスを持つことができます(したがって、異なるコアが異なるヒープデータにアクセスする可能性があります)。静的メソッドは静的データにアクセスします(共有され、 。
実行可能コードを実行のためにローカルキャッシュにコピーすることがありますが、パフォーマンス上の理由で実行されますが、共有可能性に関する問題のためではありません。
クイック回答:はい。
私はどのような方法が間違っているかのように見えます。したがって、スレッドが作成されると、静的メソッドのすべてのコンテキストがそれ自体に格納されます。その後、そのスレッドがそのメソッドを実行しているとき、すでにそれ自体に格納されているコンテキストを実行しますか?あれは正しいですか? –
はい - スレッドはコンテキストを保持します。つまり、静的メソッドとインスタンス・メソッドの両方でローカル変数のコードと値に入っている場所です。他のすべてはヒープにあります。静的メソッドとインスタンスメソッドの唯一の違いは、インスタンスメソッドはオブジェクトのメンバーにアクセスでき、静的メソッドはオブジェクトのメンバーにアクセスできないことです。インスタンスメソッドはオブジェクトごとに存在するように見えるので混乱しますが、実際にはオブジェクトに存在するのはデータだけです。コードのコピーは1つだけです。 – rghome
シングルプロセスでマルチスレッドを使用している場合は、スレッド優先度に基づいて2つのスレッドが静的メソッドを実行します。しかし、マルチプロセッサのマルチスレッド環境について話している場合は、同じ時間に同じ静的メソッドまたは非静的メソッドをマルチコアプロセッサ環境で実行できます。各プロセスは異なるJVM環境で実行されるためです。
短い答え、はい可能です。
各メソッド呼び出しは独自のスタックを取得し、並列実行できます。
呼び出される静的メソッドは、単なる実行可能ステートメントのセットです。スレッドはメソッドロジックに書き込むことができないため、各スレッドは同じ命令セットを参照します。また、命令から実行する行を指示するポインタ(sort of)もあります。
クラス/オブジェクトの観点から考えてみましょう。同じクラスのすべてのオブジェクトは同じコードベースを共有しますが、2つのオブジェクトを同時に作成できないことを意味しますか?
インスタンスは同じオブジェクトを参照していますが、別のインスタンスとは異なります。
同じように、2つのメソッド呼び出しは同じ命令セットを参照しますが、データは異なります(これらの命令はどちらの命令か、ローカル変数の値など)。
私はあなたの混乱は、メソッドが静的であるためだと思います(したがって、あなたの前提は、1つだけのコピー)。コピーは同じままです。メソッドが呼び出されるたびに、命令をコピーする必要があります。命令とデータを区別すると、それが役に立ちます。
- 1. 同じRabbitMQサーバーで複数の環境が可能ですか?
- 2. 複数のスレッドが同じポートを使用する可能性があります
- 3. EF6:複数のエンティティが同じプライマリキーを持つ可能性があります
- 4. MySQLで同じイベントが重複する可能性がありますか?
- 5. 同じタイプではありませんが、同じタイプではない可能性があります。
- 6. IISへの複数の要求が同じスレッドで同時に発生する可能性がありますか?
- 7. 静的関数同時実行性ASP.NET
- 8. 複数のスレッドが同時に同じ関数にアクセスする
- 9. ストアドプロシージャの実行にどのような環境変数が影響する可能性がありますか?
- 10. 同じマシンでUDPエラーが発生する可能性はありますか?
- 11. アクティビティコンテキストを静的メソッドに渡すと、メモリリークの可能性がありますか?
- 12. 複数のアプリケーションマスタがYARN内の同じノードに存在する可能性はありますか?
- 13. なぜ複数のスレッドを同時に実行できる同期メソッド?
- 14. 複数のsidekiqインスタンスが同じキューを処理する可能性があります
- 15. Jqueryオブジェクト同時のajaxコールで発生する可能性があります
- 16. 複数のドッカーが同じコードベースの環境を構築する
- 17. データリーダーがより優れているか、またはデータのセットが同時実行性の問題がある可能性があります
- 18. python tkinterアプリケーション複数の行に同じテキストがあります
- 19. PyQt:同じ行に複数のラベルがあります
- 20. 同じ行に複数の値がありますMYSQL
- 21. 同じ行に複数のテーブルがあります
- 22. Python bokeh:同じ行に複数のカラーセグメントがあります
- 23. 状態の更新は非同期である可能性があります
- 24. 複数の同時スレッドでテスト・メソッドのセットを実行
- 25. 実行時にnull参照が発生する可能性があります。
- 26. 同じ静的メソッドを使用する複数のステートレスBean
- 27. 複数のメソッドを同時に複数回実行する#
- 28. 同じAWS Cognitoユーザープールに複数のアプリがあると、同じユーザーのcognitoIDは同じになりますか?
- 29. スレッドは、同じスレッドから作成し、同じスレッドに再び参加する必要がありますか?
- 30. 同じスレッドで同じクラスのメソッドと並行してテストクラスを実行する
マルチコアであっても、これは同じRAMです。あなたの質問への答えはあなたが参照しているものと同じです。 –