.NET Core에서 어떤 메모리 모델이 구현됩니까?


36

ECMA CLI 사양은 약한 메모리 모델을 정의합니다. 이를 통해 명령 실행 순서를 재정렬 할 수 있습니다 (성능에 유용함). 그러나 이러한 모델에 대한 저수준 코드 작성은 매우 어렵습니다.

그리고 가장 중요한 것은 X86 / AMD64 프로세서 아키텍처는보다 엄격한 (강력한) 메모리 모델을 갖습니다. 결과적으로 Microsoft는 CLR 구현에서 사양에 설명 된 것보다 강력한 메모리 모델을 구현했습니다.

.NET Core에서 메모리 모델이 변경 되었습니까? 잠재적으로이 프레임 워크는 X86 / AMD64보다 메모리 모델이 약한 아키텍처에서 실행될 수 있습니다.

또한 .NET Core는 Mono 및 기타를 통합합니다. 내가 아는 한, 모노 메모리 모델은 더 약하고 ECMA에 해당합니다.

이 기사에서는 다음과 같이 작성된 .NET 5를 소개합니다 .

.NET Core, .NET Framework, Xamarin 및 Mono를 최대한 활용하여 .NET의 기능을 확장하십시오.

따라서 지금은 아니라면 앞으로 이러한 런타임이 단일 전체로 병합 될 것이라고 생각합니다.
아래 기사에서 작성되었습니다.

현재 CoreCLR 및 Mono 드롭 인 교체를 진행 중입니다. 다른 런타임 옵션 중에서 선택할 수있는 빌드 스위치처럼 간단하게 만들 것입니다.

올바르게 이해하면 두 개 이상의 런타임이 있습니다. 그리고 아마도 모든 사람들은 자신의 메모리 모델을 가질 것입니다.

우리가 말하는 것은 : Memory Model .


8
관련 . 결론 : CoreCLR은 x86에서 CLR의 강력한 보증을 복제하는 데 제약을받지 않습니다 (공식적으로는 ARM에서는 비실용적 임). (동시에, 의도적으로 86에서 현재 86 모델에서 이탈 할 인센티브가 없다.)
제론 Mostert

".NET Core는 모노와 기타를 통합합니다"링크 참조가 필요합니다. .NET Core CLR과 Mono CLR이 여전히 별개의 것이므로 아직은 믿지 않습니다.
Lex Li

@LexLi-업데이트되었습니다. 링크가 추가되었습니다.
Alexander Petrov

@Alexander Petrov이 링크는 2020 년에 출시 될 .NET 5와 관련이 있습니다. .NET Core와 Mono는 여전히 다른 플랫폼입니다.
V0ldek

답변:


1

메모리 모델은 런타임에 따라 다르므로 "CLR, CoreCLR 및 MonoRuntime의 메모리 모델에 차이가 있습니까?"라는 질문이 있습니다.

조금 연구 한 후에는 그 질문에 대한 답이 정말 어렵습니다. 이 은 ECMA 사양 당신에게 모든 구현이 제공해야하는 최소한의 보장을 제공합니다 당신이 언급 한 것으로는. CLR 2.0에 대한 Joe Duffy의 블로그 에는 아주 간결한 설명이 있습니다. 그런 다음 .NET Framework의 경우 CLR 모델에 대해 잘 알고있는 것보다 더 자세한 내용 을 다루는 이 두 가지 기사 가 있습니다. 그것에 쓰여진 종이 조차 있습니다 .

MonoRuntime의 경우, 원자에 대해 이야기하고 실제로 Mono가 이것을 구현하는 방법을 설명하는 이 문서 를 찾았습니다 . 그러나 세부 수준은 다소 낮습니다.

CoreCLR의 세부 사항을 찾는 것은 훨씬 까다 롭습니다. 이 dotnet / coreclr GitHub 스레드 에는 몇 가지 핵심 사항 이 강조되어 있으며 여기에는 휘발성 읽기 / 쓰기 대한 설명 있습니다.

대답하는 가장 간단한 방법은 위의 리소스를 기반으로 변경되었습니다.

그러나 귀하의 질문에 대답하는 두 번째 방법이 있으며 단순히 그 전제를 거부하는 것입니다. 일부 똑똑한 사람들이 앉았다는 의미에서 메모리 모델이 변경되었다고 가정하고 ECMA CLI 사양을 다시 작성하여 CoreCLR로 만들었습니다. 메모리 모델 사양과 새로운 메모리 모델입니다. 그렇지 않습니다. 언급 된 현명한 사람들은 앉아서 몇 달 동안 디자인을 신뢰할 수 있고 빠르며 구현하기 쉽고 사양의 최소 보증을 위반하지 않도록 개선했습니다. 연결된 Joe Duffy의 블로그에서 인용 :

우리는 수년간의 비공식적 인 작업과 예제별로 디자인을 통해 모델을 구성했습니다 (...). 이것은 구현마다 바뀌기 쉽습니다.

비공식적 인 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.