2009-04-09 14 views

Trả lời

45

Một AppDomain là gì là một đơn vị bị cô lập trong một quá trình. AppDomains có thể được tạo trong thời gian chạy, được tải bằng mã và không được tải. Đó là một ranh giới cô lập được thiết kế để làm cho các ứng dụng .NET đáng tin cậy hơn.

Một hội đồng chứa một hoặc nhiều mô-đun, giữ các đoạn mã được biên dịch. Bạn thường sẽ thấy một assembly như là một .EXE hoặc một .DLL.

Quy trình là một ứng dụng thực thi (waaaay được đơn giản hóa).

Chủ đề là ngữ cảnh thực thi. Hệ điều hành thực thi mã trong một luồng. Hệ điều hành chuyển đổi giữa các luồng, cho phép mỗi hệ điều hành thực hiện lần lượt, do đó tạo ấn tượng rằng nhiều ứng dụng đang chạy cùng một lúc.

Để kết hợp tất cả (rất đơn giản) ...

Chương trình được thực thi. Một tiến trình được tạo ra bởi hệ điều hành, và trong một luồng duy nhất của nó nó bắt đầu tải mã để thực thi. Trong một ứng dụng .NET, một AppDomain duy nhất được tạo ra bởi CLR. Bộ thực thi của ứng dụng (.EXE) được tải vào AppDomain này và bắt đầu thực hiện. Ứng dụng có thể sinh ra các tiến trình mới, tạo AppDomains, nạp các assembly khác vào các miền này, và sau đó tạo các Threads mới để thực thi mã trong bất kỳ AppDomain nào.

+3

Về mặt kỹ thuật, một hội đồng là một thành phần, bao gồm một hoặc nhiều mô-đun. Đó là các mô-đun là các tệp .EXE hoặc .DLL. –

+2

Đúng, bạn có thể hợp nhất các mô-đun vào một hội đồng duy nhất. Đó là một trong những chi tiết MANY mà tôi đã bỏ ra! – Will

+0

Khi bạn đặt tất cả lại với nhau, sự khác biệt giữa -> Một quá trình được tạo ra bởi hệ điều hành và Ứng dụng có thể sinh ra các quy trình mới là gì? – variable

10

Một trong những lợi thế lớn nhất của trình biên dịch JIT của CLR là - nó ngăn không gian chồng lên nhau của không gian địa chỉ ảo của các quy trình. Ví dụ, nếu quá trình 1 được sinh ra và CLR (MScorEE.dll) đang quản lý việc thực thi một assembly được quản lý (.exe hoặc .dll) trong quá trình đó, thì trình biên dịch JIT sẽ đảm bảo rằng không gian địa chỉ ảo được cấp phát cho quá trình sẽ không va chạm hoặc trùng lặp với các quy trình lân cận khác. Có lợi thế này, bây giờ có thể tái sử dụng quá trình duy nhất cho nhiều hơn một thực thi mã được quản lý! Mỗi thực thi mã được quản lý sẽ có AppDomain của riêng nó và hơn AppDomain có thể là một phần của một tiến trình đơn lẻ. Đây là những gì được sử dụng bởi IIS và SQL Server (quá trình duy nhất, nhiều AppDomains).

Hội là một thuật ngữ trừu tượng đại diện cho một thành phần duy nhất, có thể sử dụng lại của mã được quản lý. Hội bao gồm Siêu dữ liệu (PE32 hoặc PE32 + tiêu đề + tiêu đề IL) và hướng dẫn IL. Trình biên dịch JIT của CLR biên dịch và chuyển đổi các IL của assembly thành một tập lệnh cụ thể của máy, dựa trên bộ vi xử lý và kiến ​​trúc của nó (x86 hoặc x64).

Quy trình là những gì hệ điều hành sử dụng để tạo thuận lợi cho việc thực hiện chương trình. Một quá trình là một "đại diện RAM" của một chương trình có không gian địa chỉ bao gồm ngăn xếp, vùng heap, tĩnh và mã. Mỗi quy trình có một Id tiến trình duy nhất được liên kết với nó.

Chủ đề là quy trình trọng lượng nhẹ. Một quá trình có ít nhất một luồng (tức là chủ đề chính) và tùy thuộc vào hệ điều hành song song có thể tạo nhiều luồng trong một tiến trình và chuyển đổi ngữ cảnh giữa chúng để hỗ trợ thực thi chương trình nhanh hơn. Các luồng có thể chia sẻ một số vùng bộ nhớ trong một tiến trình.

+0

: chủ đề thường không chia sẻ ngăn xếp. Họ có thể đọc/sửa đổi ngăn xếp của nhau nếu họ thực sự muốn nó, nhưng nói chung, mỗi thread có ngăn xếp riêng của mình. Tôi đã xóa từ ngữ đó khỏi bài đăng của bạn. Vui lòng kiểm tra lại nếu đó là ý của bạn. – quetzalcoatl

+0

Tôi đồng ý. Chủ đề có ngăn xếp của riêng họ. Cảm ơn bạn đã sửa chữa. – IntelligentBinary

Các vấn đề liên quan