Mô hình bộ nhớ nào được triển khai trong .NET Core?


36

Đặc tả ECMA CLI xác định mô hình bộ nhớ yếu. Điều này cho phép sắp xếp lại thứ tự thực hiện lệnh (rất hữu ích cho hiệu suất). Nhưng viết mã cấp thấp cho một mô hình như vậy là rất khó.

Và quan trọng nhất - Kiến trúc bộ xử lý X86 / AMD64 có mô hình bộ nhớ (mạnh) nghiêm ngặt hơn. Kết quả là, Microsoft đã triển khai một mô hình bộ nhớ mạnh hơn trong triển khai CLR của mình so với mô tả trong đặc tả.

Mô hình bộ nhớ đã thay đổi trong .NET Core chưa? Có khả năng, khung này có thể chạy trên các kiến ​​trúc với mô hình bộ nhớ yếu hơn X86 / AMD64.

Ngoài ra, .NET Core kết hợp Mono và khác. Và theo như tôi biết, mô hình bộ nhớ Mono yếu hơn, tương ứng với ECMA.

Trong bài viết này Giới thiệu .NET 5 bằng văn bản:

Mở rộng khả năng của .NET bằng cách tận dụng tối đa .NET Core, .NET Framework, Xamarin và Mono.

Vì vậy, tôi nghĩ rằng nếu không phải bây giờ, thì trong tương lai những thời gian chạy này sẽ hợp nhất thành một tổng thể duy nhất.
Dưới đây trong bài viết nó được viết:

Chúng tôi đang trong quá trình thực hiện thay thế thả xuống CoreCLR và Mono cho nhau. Chúng tôi sẽ làm cho nó đơn giản như một công tắc xây dựng để lựa chọn giữa các tùy chọn thời gian chạy khác nhau.

Nếu tôi hiểu chính xác, sẽ có hai (hoặc nhiều) thời gian chạy. Và có lẽ mọi người sẽ có mô hình bộ nhớ của riêng mình.

Chúng ta đang nói về cái gì: Mô hình bộ nhớ .


8
Liên quan . Điểm mấu chốt: CoreCLR không coi bản thân bị ràng buộc trong việc sao chép các bảo đảm mạnh mẽ hơn của CLR trên x86 (điều này, công bằng mà nói, sẽ không thực tế trên ARM). (Đồng thời, không có động cơ nào cố tình đi chệch khỏi mô hình x86 hiện tại trên x86.)
Jeroen Mostert

".NET Core kết hợp Mono và khác" cần tham chiếu liên kết. Tôi không tin đó là sự thật, vì .NET Core CLR và Mono CLR vẫn là những thứ riêng biệt.
Lex Li

@LexLi - cập nhật. Đã thêm liên kết.
Alexander Petrov

@Alexander Petrov Liên kết đó liên quan đến .NET 5, sắp ra mắt vào năm 2020. .NET Core và Mono vẫn là các nền tảng khác nhau.
V0ldek

Câu trả lời:


1

Mô hình bộ nhớ dành riêng cho thời gian chạy, vì vậy, câu hỏi của bạn thực tế là "có bất kỳ sự khác biệt nào trong các mô hình bộ nhớ của CLR, CoreCLR và MonoR.78" không.

Sau khi nghiên cứu một chút, câu hỏi thực sự rất khó trả lời. Có đặc điểm kỹ thuật ECMA mà bạn đã đề cập, cung cấp cho bạn sự đảm bảo tối thiểu mà tất cả các triển khai phải cung cấp. Có một mô tả ngắn gọn, rất hay trên blog của Joe Duffy cho CLR 2.0. Sau đó, đối với .NET Framework có bài viết gồm hai phần này nói về mô hình CLR có lẽ nhiều chi tiết hơn là điều lành mạnh để biết. Thậm chí còn có một tờ giấy viết về điều đó.

Đối với MonoR.78, tôi đã tìm thấy tài liệu này nói về nguyên tử và thực sự mô tả cách thức Mono thực hiện điều này, mặc dù mức độ chi tiết khá thấp.

Tìm chi tiết về CoreCLR thậm chí còn khó hơn. Có một số điểm chính được tô sáng trong luồng GitHub dotnet / coreclr này và một cuộc thảo luận về đọc / ghi dễ bay hơi trong phần này .

Cách đơn giản nhất để trả lời là - vâng, nó đã thay đổi, dựa trên các tài nguyên trên.

Tuy nhiên, có một cách thứ hai để trả lời câu hỏi của bạn và đó chỉ đơn giản là phủ nhận tiền đề của nó - dường như giả định rằng mô hình bộ nhớ đã thay đổi theo nghĩa một số người thông minh đã ngồi xuống, viết lại thông số ECMA CLI, đưa nó vào CoreCLR thông số mô hình bộ nhớ và đó là mô hình bộ nhớ mới. Đó không phải là tình huống. Những người thông minh được đề cập đã ngồi xuống và, trong nhiều tháng, đã tinh chỉnh thiết kế để trở nên đáng tin cậy, nhanh chóng, dễ thực hiện và không vi phạm các đảm bảo tối thiểu của thông số kỹ thuật. Trích dẫn từ blog của Joe Duffy được liên kết:

Chúng tôi đã xây dựng mô hình của mình qua nhiều năm làm việc không chính thức và ví dụ thiết kế (...) đây là khả năng thay đổi từ một triển khai sang tiếp theo.

Đặc điểm kỹ thuật ECMA không chính thức là không may mắn, chính thức như chúng ta có bây giờ. Không có mô tả chính thức về các thay đổi giữa thông số ECMA và triển khai CLR, cũng như không có mô tả chính thức về các thay đổi giữa CLR và CoreCLR. Và, quan trọng hơn, sự khác biệt cụ thể về triển khai giữa ECMA CLI và CLR / CoreCLR chỉ là - cụ thể thực hiện - và không được dựa vào . Nguồn đáng tin cậy duy nhất 100% về cách triển khai mô hình bộ nhớ .NET Core là mã nguồn. Và điều đó rõ ràng thay đổi với mọi cam kết, mọi bản phát hành và không có gì đảm bảo rằng nhóm sẽ không ném toàn bộ jitter ra khỏi cửa sổ và viết lại cho .NET 5 giống hệt như thông số ECMA (tuy nhiên rất khó xảy ra ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.