5

Google Chrome và IE8 (trong số những người khác) nhằm mục đích cung cấp độ tin cậy/ổn định cao hơn bằng cách cách ly từng tab (trang web) trong một quy trình riêng biệt (đơn giản hơn, tôi biết).Thiết kế đa tiến trình Chrome/IE8, có thể trong .NET không?

Điều này dường như nặng hơn nhiều sau đó nhiều luồng, nhưng có lợi ích lớn nhất của sự cố trong một quá trình không làm giảm toàn bộ ứng dụng. Có vẻ như kiến ​​trúc nhiều quá trình từ lâu đã được sử dụng trong các ứng dụng phía máy chủ (ví dụ: máy chủ web), nhưng đây là những quá trình không có GUI chuyên dụng. Điều thú vị là nó hiện đang được sử dụng trong giao diện người dùng của các ứng dụng máy tính để bàn.

Tôi sẽ thực hiện điều này như thế nào trong ứng dụng .NET Biểu mẫu Windows? Thậm chí có thể không?

Process.Start() là nơi đầu tiên hiển nhiên, nhưng GUI của quy trình mới không được tích hợp chặt chẽ với GUI của ứng dụng máy chủ lưu trữ. Đây là một ứng dụng độc lập mới, không phải là một điều khiển phụ/cửa sổ của ứng dụng máy chủ, vì nó là với Chrome/IE8.

(Đối với bất cứ ai quan tâm đến Scott Hanselmann đã viết một đoạn giới thiệu tốt để các IE8 multi-process architecture here..)

[Cập nhật]

Cụ thể hơn:

Làm thế nào có thể một "sub-process" riêng biệt làm cho trực tiếp đến giao diện người dùng trong "quy trình chính"? Đây thực sự là những gì đang xảy ra, hoặc như đã được đề xuất trong các bình luận, liệu quá trình con sử dụng IPC để yêu cầu quá trình chính để làm cho nó?

Trả lời

3

Một tùy chọn tốt hơn để sử dụng nhiều quy trình trong .NET sẽ là sử dụng nhiều AppDomain thay thế. Điều này có lợi thế là chỉ tạo một quy trình Windows thực tế, nhưng vẫn mang lại sự ổn định hơn cho nhiều khu vực (tức là một sự cố trong một AppDomain sẽ chỉ mất một vùng đó chứ không phải toàn bộ ứng dụng).

Có các chi phí liên quan đến điều này, vì các đối tượng cần được tuần tự hóa trên các ranh giới AppDomain. Tuy nhiên, có thể dễ dàng phát triển hơn mô hình đa tiến trình.

+0

+1, đặc biệt là hãy cẩn thận giao tiếp giữa các lĩnh vực. Điều đó có thể tốn kém hơn nhiều so với các nhà phát triển đôi khi mong đợi. –

+1

Có thể 2 AppDomains trong một quá trình cập nhật giao diện người dùng độc lập, tức là các tab riêng biệt? Ngoài ra, như Scott Hanselmann nói, vẫn có thể làm giảm toàn bộ quá trình từ một AppDomain. – Ash

+0

@Ash giả định một quá trình/AppDomain là quá trình "GUI", chịu trách nhiệm nhận lệnh từ các quy trình khác và phản ánh chúng; và quay trở lại với họ, tại sao không? –

5

Google Chrome đang sử dụng tên có ống để liên lạc liên ngành.

Có một số tài liệu thú vị ở đây: http://dev.chromium.org/developers/design-documents

Để biết thêm thông tin về tên ống với ".net" chỉ google nó.

@Ash: Quy trình con đang chạy trong Windows riêng biệt "Máy tính để bàn" có nghĩa là chúng không có cách hiển thị bất kỳ thứ gì. (Máy tính để bàn là một điều khó khăn ...) Vì vậy, tôi phải giả định rằng mọi thứ mà trình xử lý con phải thực hiện qua IPC. Và sau đó quá trình chính (?) Hiển thị nó.

tôi thấy rằng riêng Windows "Desktop" điều ở đây: http://dev.chromium.org/developers/design-documents/multi-process-architecture

+0

Bất kỳ ý tưởng nào về cách nó triển khai bên tương tác GUI? – Ash

+0

Các liên kết tuyệt vời trên Chrome, cảm ơn, – Ash

+0

Bạn được hoan nghênh. Tôi cũng rất quan tâm đến điều này. :) –

1

btw ...dup

Xem: Windows Forms application like Google Chrome with multiple processes (với câu trả lời từ Jon Skeet: o)

(Tôi nghĩ rằng đây trả lời cho "cụ thể hơn" phần quá)

+0

Cảm ơn một lần nữa. Tôi đã dành 5 phút để tìm kiếm một câu hỏi hiện có. Tôi cũng đã nhập nhiều tiêu đề khác nhau vào hộp văn bản "Hỏi câu hỏi". Những điều này không làm việc tốt trong kinh nghiệm của tôi, oh well. – Ash

+0

Tôi vừa xem nhanh hộp "Liên quan" ở bên phải: P –

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