Khung tranh tường Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Báo cáo vấn đềopen_in_new Xem nguồnopen_in_new Nightly · 8.2 · 8.1 · 8.0 · 7.6 · 7.5

Mô hình đánh giá song song và mô hình tăng dần của Bazel.

Mô hình dữ liệu

Mô hình dữ liệu bao gồm các mục sau:

Đánh giá

Bạn có thể tạo một bản dựng bằng cách đánh giá nút đại diện cho yêu cầu bản dựng.

Trước tiên, Bazel tìm SkyFunction tương ứng với khoá của SkyKey cấp cao nhất. Sau đó, hàm này yêu cầu đánh giá các nút cần thiết để đánh giá nút cấp cao nhất, từ đó dẫn đến các lệnh gọi SkyFunction khác cho đến khi đạt đến các nút lá. Các nút lá thường là các nút đại diện cho tệp đầu vào trong hệ thống tệp. Cuối cùng, Bazel sẽ kết thúc bằng giá trị của SkyValue cấp cao nhất, một số hiệu ứng phụ (chẳng hạn như tệp đầu ra trong hệ thống tệp) và biểu đồ không tuần hoàn có hướng của các phần phụ thuộc giữa các nút liên quan đến bản dựng.

SkyFunction có thể yêu cầu SkyKeys trong nhiều lượt nếu không thể biết trước tất cả các nút cần thiết để thực hiện công việc. Một ví dụ đơn giản là đánh giá một nút tệp đầu vào hóa ra là một đường liên kết tượng trưng: hàm này cố gắng đọc tệp, nhận ra đó là một đường liên kết tượng trưng và do đó tìm nạp nút hệ thống tệp đại diện cho mục tiêu của đường liên kết tượng trưng. Nhưng bản thân đường liên kết tượng trưng đó cũng có thể là một đường liên kết tượng trưng, trong trường hợp đó, hàm ban đầu cũng cần tìm nạp mục tiêu của nó.

Các hàm được biểu thị trong mã bằng giao diện SkyFunction và các dịch vụ do giao diện có tên SkyFunction.Environment cung cấp cho giao diện đó. Dưới đây là những việc mà hàm có thể làm:

Việc triển khai SkyFunction đúng cách sẽ tránh truy cập dữ liệu theo cách nào khác ngoài việc yêu cầu các phần phụ thuộc (chẳng hạn như bằng cách trực tiếp đọc hệ thống tệp), vì điều đó sẽ khiến Bazel không đăng ký phần phụ thuộc dữ liệu trên tệp đã đọc, từ đó dẫn đến các bản dựng gia tăng không chính xác.

Khi có đủ dữ liệu để thực hiện công việc, hàm sẽ trả về một giá trị không phải là null cho biết đã hoàn tất.

Chiến lược đánh giá này có một số lợi ích:

Mức độ gia tăng

Vì các hàm chỉ có thể truy cập vào dữ liệu đầu vào bằng cách phụ thuộc vào các nút khác, nên Bazel có thể tạo một biểu đồ luồng dữ liệu hoàn chỉnh từ tệp đầu vào đến tệp đầu ra và sử dụng thông tin này để chỉ tạo lại những nút thực sự cần tạo lại: tập hợp các tệp đầu vào đã thay đổi.

Cụ thể, có hai chiến lược tăng dần có thể áp dụng: chiến lược từ dưới lên và chiến lược từ trên xuống. Cách nào tối ưu phụ thuộc vào biểu đồ phần phụ thuộc.

Bazel chỉ vô hiệu hoá từ dưới lên.

Để tăng tính gia tăng, Bazel sử dụng tính năng loại bỏ thay đổi: nếu một nút bị vô hiệu hoá, nhưng khi tạo lại, bạn phát hiện thấy giá trị mới của nút đó giống với giá trị cũ, thì các nút bị vô hiệu hoá do thay đổi trong nút này sẽ được "hồi sinh".

Điều này rất hữu ích, ví dụ: nếu bạn thay đổi một nhận xét trong tệp C++: thì tệp .o được tạo từ tệp đó sẽ giống nhau, do đó, bạn không cần gọi lại trình liên kết.

Liên kết / Biên dịch gia tăng

Hạn chế chính của mô hình này là việc vô hiệu hoá một nút là một vấn đề toàn bộ hoặc không có gì: khi một phần phụ thuộc thay đổi, nút phụ thuộc luôn được tạo lại từ đầu, ngay cả khi có một thuật toán tốt hơn sẽ thay đổi giá trị cũ của nút dựa trên các thay đổi. Sau đây là một số ví dụ về trường hợp bạn nên sử dụng tính năng này:

Lý do khiến Bazel không hỗ trợ những điều này theo nguyên tắc có hai khía cạnh:

Cho đến nay, bạn có thể đạt được hiệu suất đủ tốt bằng cách phân tích một bước xây dựng tốn kém và thực hiện việc đánh giá lại một phần theo cách đó. Ví dụ: trong một ứng dụng Android, bạn có thể chia tất cả các lớp thành nhiều nhóm và dex riêng biệt. Bằng cách này, nếu các lớp trong một nhóm không thay đổi, bạn không cần phải tạo lại tệp dex.

Liên kết với các khái niệm của Bazel

Đây là bản tóm tắt cấp cao về các phương thức triển khai SkyFunction và SkyValue chính mà Bazel sử dụng để tạo bản dựng:

Dưới đây là sơ đồ minh hoạ mối quan hệ giữa các phương thức triển khai SkyFunction sau khi tạo bản dựng Bazel:

Biểu đồ về mối quan hệ triển khai SkyFunction

Link nội dung: https://lichtot.edu.vn/mo-danh-nhau-danh-de-con-gi-a39870.html