.NET Coreにはどのメモリモデルが実装されていますか?


36

ECMA CLI仕様では、弱いメモリモデルが定義されています。これにより、コマンドの実行順序を並べ替えることができます(パフォーマンスに役立ちます)。しかし、そのようなモデルの低レベルのコードを書くことは非常に困難です。

そして最も重要なこと-X86 / AMD64プロセッサアーキテクチャには、より厳密な(強力な)メモリモデルがあります。その結果、MicrosoftはCLR実装に、仕様に記載されているよりも強力なメモリモデルを実装しました。

.NET Coreでメモリモデルは変更されましたか?潜在的に、このフレームワークは、X86 / AMD64よりも弱いメモリモデルのアーキテクチャで実行できます。

さらに、.NET CoreにはMonoやその他が組み込まれています。そして、私の知る限りでは、Monoメモリーモデルはより弱く、ECMAに対応しています。

この記事では、.NET 5の概要を説明します

.NET Core、.NET Framework、Xamarin、Monoを最大限に活用して.NETの機能を拡張します。

したがって、今ではないとしたら、将来的にはこれらのランタイムが1つの全体にマージされると思います。
記事の下に書かれています:

現在、CoreCLRとMonoのドロップイン置換を相互に作成しています。異なるランタイムオプションから選択するビルドスイッチと同じくらい簡単にします。

私が正しく理解していれば、2つ(またはそれ以上)のランタイムがあります。そしておそらく誰もが独自のメモリモデルを持っているでしょう。

私たちは話している:メモリモデルを


8
関連。結論:CoreCLR自体は、x86でのCLRのより強力な保証の複製に制約されているとは見なしません(これは、公平に言えば、ARMでは非実用的です)。(同時に、x86上の現在のx86モデルから意図的に逸脱するインセンティブはありません。)
Jeroen Mostert

「.NET CoreにはMonoおよびその他が組み込まれています」リンク参照が必要です。.NET Core CLRとMono CLRはまだ別個のものであるため、私はまだそうだとは信じていません。
Lex Li

@LexLi-更新されました。リンクを追加しました。
Alexander Petrov

@Alexander Petrovそのリンクは、2020年に予定されている.NET 5に関係しています。.NETCoreとMonoはまだ異なるプラットフォームです。
V0ldek

回答:


1

メモリモデルはランタイムに固有であるため、実際の質問は「CLR、CoreCLR、MonoRuntimeのメモリモデルに違いはありますか」です。

少し調べた後、質問は答えることが本当に、本当に難しいです。あるECMA仕様あなたのすべての実装が提供しなければならない最低限の保証を与えるあなたが言及したことは、。Joe Duffyの CLR 2.0に関するブログには、とても簡潔で簡潔な説明があります。次に、.NET Frameworkについては、この2 部構成の記事でCLRモデルについて説明します。この記事は、おそらく知っているよりも詳細です。その上に書かれた論文さえあります。

MonoRuntimeの場合、詳細レベルはやや低いものの、アトミックについて説明し、Monoがこれを実装する方法を実際に説明しているこのドキュメントを見つけました。

CoreCLRの詳細を見つけるのはさらに困難です。この中で強調され、いくつかのキーポイントがありますDOTNET / coreclr GitHubのスレッドおよび揮発性の読み取り/書き込みに関する議論これでは

答える最も簡単な方法は-はい、上記のリソースに基づいて変更されました。

ただし、あなたの質問に答える2つ目の方法があります。それは単にその前提を否定することです。一部の賢い人々が座ったという意味でメモリモデルが変更されたと想定し、ECMA CLI仕様を書き直してCoreCLRにしましたメモリモデルの仕様、それが新しいメモリモデルです。そうではありません。言及されたスマートな人々は、何ヶ月にもわたって、信頼性が高く、高速で、実装が合理的に簡単で、仕様の最小保証に違反しないように設計を洗練しました。リンクされているJoe Duffyのブログからの引用:

私たちは何年にもわたって非公式な作業と例による設計(...)でモデルを構築してきましたが、これは1つの実装から次の実装に変更される傾向があります。

非公式のECMA仕様は、残念ながら、現在のところ、正式なものです。ECMA仕様とCLR実装との間の変更に関する正式な説明はなく、CLRとCoreCLR間の変更に関する正式な説明もありません。さらに重要なのは、ECMA CLIとCLR / CoreCLRの実装固有の違いは、実装固有であり、依存してはならないということです。.NET Coreメモリモデルの実装方法の唯一の100%信頼できるソースは、ソースコードです。そして、それは明らかにすべてのコミット、すべてのリリースで変化し、チームがウィンドウ全体のジッターを捨てて.NET 5がECMA仕様とまったく同じになるように書き直さないという保証はありません(ただし、実際にはそうではありません) )。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.