【问题标题】:What memory model is implemented in .NET Core?.NET Core 中实现了什么内存模型?
【发布时间】:2020-02-29 18:49:51
【问题描述】:

ECMA CLI 规范定义了弱内存模型。这允许重新排序命令执行顺序(这对性能很有用)。但是为这样的模型编写低级代码非常困难。

最重要的是 - X86/AMD64 处理器架构具有更严格(强)的内存模型。因此,微软在其 CLR 实现中实现了比规范中描述的更强大的内存模型。

.NET Core 中的内存模型是否发生了变化?此框架可能可以在内存模型比 X86/AMD64 弱的架构上运行。

此外,.NET Core 还整合了 Mono 等。而且据我所知,Mono内存模型比较弱,对应ECMA。

在这篇文章Introducing .NET 5写道:

充分利用 .NET Core、.NET Framework、Xamarin 和 Mono,扩展 .NET 的功能。

所以我认为,如果不是现在,那么将来这些运行时将合并为一个整体。
文章下面是这样写的:

我们正在制作 CoreCLR 和 Mono 的替代品。我们将使它像构建切换一样简单,以便在不同的运行时选项之间进行选择。

如果我理解正确,将会有两个(或更多)运行时。而且可能每个人都会有自己的记忆模型。

我们在说什么:Memory Model

【问题讨论】:

  • Related。底线:CoreCLR 并不认为自己受限于在 x86 上复制 CLR 的更强保证(公平地说,这在 ARM 上是不切实际的)。 (同时,没有动机在 x86 上故意偏离当前的 x86 模型。)
  • “.NET Core 合并了 Mono 和其他”需求链接参考。我不相信这是真的,因为 .NET Core CLR 和 Mono CLR 仍然是不同的东西。
  • @LexLi - 已更新。添加链接。
  • @Alexander Petrov 该链接涉及 2020 年即将推出的 .NET 5。.NET Core 和 Mono 仍然是不同的平台。

标签: c# .net-core


【解决方案1】:

内存模型是特定于运行时的,所以你的问题其实是“CLR、CoreCLR和MonoRuntime的内存模型有什么区别”。

经过一番研究,我发现这个问题真的很难回答。您提到了the ECMA specification,它为您提供了所有实现必须提供的最低限度的保证。对于 CLR 2.0,Joe Duffy's blog 有一个非常简洁的描述。然后,对于 .NET Framework,有 this two part article 谈论 CLR 模型的细节可能比它的健康了解要多。上面甚至还写着a paper

对于 MonoRuntime,我发现 this doc 谈论原子并实际描述了 Mono 实现这一点的方式,尽管详细程度相当低。

查找 CoreCLR 的详细信息更加棘手。这个dotnet/coreclr GitHub thread 中突出显示了一些关键点,并讨论了关于易失性读/写in this one

最简单的回答方法是——是的,它已经改变了,基于上述资源。

但是,还有第二种方法可以回答您的问题,那就是简单地否认它的前提 - 它似乎假设内存模型发生了变化,因为一些聪明的人坐下来重写了 ECMA CLI 规范,使进入 CoreCLR 内存模型规范,这就是新的内存模型。事实并非如此。上面提到的聪明人坐下来,在几个月的时间里,将设计改进为可靠、快速、易于实施且不违反规范的最低保证。引用链接的 Joe Duffy 的博客:

我们已经通过多年的非正式工作和示例设计(...)构建了我们的模型,这很容易从一个实现更改为下一个实现。

不幸的是,非正式的 ECMA 规范与我们目前所获得的一样正式。没有正式描述 ECMA 规范和 CLR 实现之间的变化,也没有正式描述 CLR 和 CoreCLR 之间的变化。而且,更重要的是,ECMA CLI 和 CLR/CoreCLR 之间的具体实现差异仅在于 - 实现具体 - 不能依赖。 .NET Core 内存模型实现方式的唯一 100% 可靠来源是源代码。这显然会随着每次提交、每次发布而发生变化,并且无法保证团队不会将整个抖动抛到窗外并为 .NET 5 重写它以与 ECMA 规范完全相同(但极不可能是)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多