2010-01-07 28 views
36

Chúng tôi đã được thông báo rằng Google Chrome chạy từng tab trong một quy trình riêng biệt. Do đó, sự cố trong một tab sẽ không gây ra sự cố trong các tab khác.Google Chrome có thể cách ly các tab thành các quy trình riêng lẻ trong khi trông giống như một ứng dụng đơn lẻ như thế nào?

AFAIK, nhiều quy trình được sử dụng chủ yếu trong các chương trình không có GUI. Tôi chưa bao giờ đọc bất kỳ kỹ thuật nào có thể nhúng nhiều quy trình GUI vào một quy trình duy nhất.

Chrome hoạt động như thế nào?

Tôi đang đặt câu hỏi này vì tôi đang thiết kế phần mềm CCTV sẽ sử dụng SDK giải mã video từ nhiều nhà sản xuất máy ảnh, một số trong số đó không ổn định. Vì vậy, tôi thích chạy các SDK này trong các quy trình khác nhau, mà tôi nghĩ là tương tự như Chrome.

+1

Tải xuống nguồn và xem! Điều này sẽ mang lại lợi ích to lớn cho bạn nếu bạn cần một giải pháp tương tự. Google Chrome là nguồn mở. – Conor

+0

Việc thanh toán của tôi đối với nguồn Chromium là 19,7 GB và 545,764 Tệp. [Các liên kết được đánh dấu ở trên] (http://dev.chromium.org/developers/design-documents/process-models) sẽ nhanh hơn rất nhiều để thực hiện! –

Trả lời

42

Về cơ bản, chúng sử dụng một quy trình khác kết dính chúng lại với nhau trong GUI.

Google Chrome tạo ba loại quy trình khác nhau: trình duyệt, trình kết xuất và plugin.

Trình duyệt: Chỉ có một quy trình trình duyệt, quản lý các tab, cửa sổ và "chrome" của trình duyệt. Quá trình này cũng xử lý tất cả các tương tác với đĩa, mạng, đầu vào của người dùng và hiển thị, nhưng nó không cố gắng phân tích cú pháp hoặc hiển thị bất kỳ nội dung nào từ web.

Trình kết xuất: Quy trình trình duyệt tạo nhiều quy trình kết xuất, mỗi quy trình chịu trách nhiệm hiển thị trang web. Quá trình kết xuất chứa tất cả các logic phức tạp để xử lý HTML, JavaScript, CSS, hình ảnh, v.v. Chrome đạt được điều này bằng cách sử dụng công cụ hiển thị WebKit nguồn mở, cũng được trình duyệt web Safari của Apple sử dụng. Mỗi quá trình kết xuất đồ họa được chạy trong một hộp cát, có nghĩa là nó hầu như không có quyền truy cập trực tiếp vào đĩa, mạng hoặc hiển thị. Tất cả các tương tác với các ứng dụng web, bao gồm các sự kiện nhập của người dùng và vẽ màn hình, phải trải qua quá trình trình duyệt. Điều này cho phép trình duyệt theo dõi các trình kết xuất cho hoạt động đáng ngờ, giết chết chúng nếu nó nghi ngờ một sự khai thác đã xảy ra.

Plug-in: Quy trình trình duyệt cũng tạo một quy trình cho từng loại trình cắm đang được sử dụng, chẳng hạn như Flash, Quicktime hoặc Adobe Reader. Các quy trình này chỉ chứa các trình cắm thêm, cùng với một số mã keo để cho phép chúng tương tác với trình duyệt và trình kết xuất đồ họa.

Nguồn: Chromium Blog: Multi-process Architecture

+1

Tôi không hiểu. Có vẻ như các tab này thuộc về quá trình Trình duyệt, làm cách nào để các ảnh này có thể vẽ hình ảnh và văn bản trên một tab thuộc về một quá trình khác? – ablmf

+4

Chúng không thuộc quá trình Trình duyệt. Trình duyệt chỉ đơn giản là quản lý chúng (nó tạo ra chúng, ngăn chặn chúng và giám sát chúng).Quá trình trình duyệt cũng tạo GUI trình duyệt, nhưng logic nội bộ của các tab (phần nguy hiểm dễ bị treo), được xử lý bởi các quy trình Renderer riêng biệt (một cho mỗi tab). –

+1

Tóm tắt tuyệt vời! Một điều cần thêm, mỗi Tiện ích mở rộng của Chrome chạy trong quá trình của riêng họ. Nếu bạn muốn biết quy trình nói chuyện với nhau như thế nào, hãy xem phần IPC trong cơ sở nguồn Chromium. –

0

Hầu hết các công việc của render một trang web là tìm ra nơi chính xác mọi thứ đi (ví dụ: nơi để đặt mỗi bức ảnh, những gì màu sắc để làm cho từng đoạn văn bản). Công việc đó được thực hiện trong một quy trình riêng biệt. Khi quá trình riêng biệt đã tìm ra nơi mọi thứ diễn ra, nó sẽ chuyển thông tin đó đến quy trình chính của Chrome, thu hút tất cả các yếu tố trên màn hình.

Không rõ chính xác cách thiết lập hệ thống sdk video của bạn. Nhưng bạn có thể có một quá trình giải nén video và một quá trình khác hiển thị nó cho màn hình. Tuy nhiên, rất có thể bạn đang sử dụng opengl hoặc DirectX. Những API smay áp đặt một số hạn chế về cách bạn phân chia mọi thứ giữa các quy trình khác nhau.

+1

Về đoạn đầu tiên của bạn, tôi nhận ra rằng Chrome không làm điều này, nhưng kỹ thuật này không khác với OLE. Bạn có tài liệu Word có Tài liệu Excel được nhúng. Bạn khởi động Excel bằng cách nhấp chuột phải vào bảng tính trong Word và chọn Mở. Quá trình Excel được khởi chạy để chỉnh sửa tài liệu trong một quy trình riêng biệt. Bây giờ, nếu bạn gõ một cái gì đó trong Excel, bạn sẽ thấy nó thay đổi ở phía Word trong thời gian thực. Cách này hoạt động là có một trình kết xuất đồ họa Excel cụ thể chạy bên trong Word, trong đó trao đổi tiến trình (sử dụng COM IDataObject) để lấy dữ liệu để vẽ. – zumalifeguard

+1

OLE là một kiến ​​trúc gọi thủ tục từ xa (RPC). RPC thực sự là một cách để hai quá trình giao tiếp với nhau trên cùng một máy (tuy nhiên nó đã không còn được ưa chuộng trong vài năm qua). – speedplane

-2

đối tượng Window - các, các khu vực hình chữ nhật drawable nhỏ được sử dụng để thực hiện các widget, không phải những gì người dùng thấy như một cửa sổ - có thể hoàn hảo được chia sẻ giữa các quá trình, sử dụng chung bộ nhớ hoặc giao thức X. Kiểm tra tài liệu của bộ công cụ của bạn.

+0

mỗi HWND thuộc về một quá trình cụ thể – zumalifeguard

+0

@zuma không mâu thuẫn với những gì tôi đã viết. – Tobu

0

Tôi chỉ đưa ra câu trả lời đầu tiên (một trong những giải thích 'duyệt' vs 'kết xuất đồ họa' vs 'plugins' một tín hiệu tích cực ... mà dường như hoàn chỉnh nhất và có ý nghĩa tốt với tôi.

Điều duy nhất Tôi sẽ thêm chỉ là một vài ý kiến ​​thêm về TẠI SAO thiết kế của Google là cách nó, và đưa ra một ý kiến ​​về lý do tại sao nó luôn là sự lựa chọn đầu tiên của tôi cho một trình duyệt tổng thể/mỗi ngày (Tho I nhận ra rằng HOW (và không phải TẠI SAO) là câu hỏi đang được hỏi.)

Thiết kế sao cho các thành phần riêng lẻ có mã trong các quy trình riêng biệt cho phép Hệ điều hành không bảo vệ 'quy trình từ vô tình (hoặc có mục đích) sửa đổi mỗi khác theo cách không được thiết kế rõ ràng.

Các phần duy nhất trong thiết kế có thể đọc và ghi dữ liệu được chia sẻ là những phần được thiết kế để CẦN truy cập dữ liệu đó, và cho phép kiểm soát việc truy cập chỉ là 'đọc' hay 'đọc truy cập 'và' viết ', v.v. Và vì các điều khiển truy cập này được thực hiện trong phần cứng, chúng là đảm bảo chắc chắn rằng các quy tắc truy cập không thể bị vi phạm. Do đó, các plugin và tiện ích mở rộng từ các tác giả và công ty khác, chạy trong các tab/quy trình riêng biệt, không thể chia nhỏ lẫn nhau.

Thiết kế như vậy có tác dụng giảm thiểu khả năng thay đổi một số mã hoặc dữ liệu không được thiết kế để thay đổi. Điều này là vì lý do an ninh lý do và khiến mã đáng tin cậy hơn, ít lỗi hơn.

Thực tế đơn giản Google có thiết kế phức tạp như vậy, với tôi, chứng thực tốt cho thực tế rằng Google có vẻ nắm bắt được những khái niệm này và đã xây dựng một sản phẩm cao cấp. (Với tư cách là nhà phát triển web, chúng tôi vẫn phải kiểm tra mã web của chúng tôi với nhiều trình duyệt. Và, các trình duyệt như Firefox, có được sử dụng trong một thời gian dài và có một nhóm nhà phát triển web tuyệt vời liên quan đến số ' Tuy nhiên, để sử dụng trình duyệt tổng thể hàng ngày, đối với hầu như tất cả các tác vụ, trình duyệt Chrome đã trở thành lựa chọn đầu tiên của tôi. (Chỉ quan điểm của tôi, và tất nhiên, YMMV.)

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