dòng chảy :: phục vụ :: Nguồn

Đây là một lớp trừu tượng.

#include <source.h>

Một phần trừu tượng cho một mô-đun lấy nguồn các dịch vụ để tải hoặc chính xác hơn là xử lý dữ liệu có thể được sử dụng để tải các dịch vụ đó.

Bản tóm tắt

Ví dụ về các xử lý dữ liệu như vậy là:

  • một đường dẫn hệ thống tệp đến một bản đồ từ vựng được tuần tự hóa
  • một xử lý cho một RPC đến chỉ định một mô hình máy học để tải
  • một Loader (xem loader.h ) Việc xử lý dữ liệu thường được giả định là nhỏ.

Một Nguồn giám sát một số nguồn lực bên ngoài (ví dụ như hệ thống tập tin, gọi điện RPC) để tìm hiểu về servables mới và / hoặc các phiên bản mới của servables và / hoặc sự cần thiết phải dỡ bỏ các phiên bản thể phân phát. Nó sử dụng callback được cung cấp để hướng dẫn một module Target (ví dụ AspiredVersionsManager ) phiên bản nào (s) của một thể phân phát cho tải. Bên cạnh đó, tùy thuộc vào ngữ nghĩa của các mô-đun Target, các Nguồn ngầm chỉ thị nó nào để dỡ bỏ bằng cách bỏ qua những servables.

Một trường hợp phổ biến là một nguồn phát ra phiên bản dành cho chính xác một thể phân phát. Một trường hợp đơn giản hơn nữa là một dịch vụ có một phiên bản tĩnh duy nhất cho thời gian tồn tại của máy chủ.

Các nguồn có thể chứa trạng thái được chia sẻ giữa nhiều dịch vụ được phát ra, ví dụ:

  1. Nhóm luồng được chia sẻ hoặc tài nguyên khác mà nhiều dịch vụ sử dụng.
  2. Một cấu trúc dữ liệu chỉ đọc được chia sẻ mà nhiều dịch vụ sử dụng, để tránh tốn thời gian và không gian khi sao chép cấu trúc dữ liệu trong mỗi phiên bản dịch vụ. Trạng thái chia sẻ có thời gian và kích thước khởi tạo không đáng kể (ví dụ: nhóm luồng) có thể được tạo một cách háo hức bởi nguồn, sau đó nguồn này sẽ nhúng một con trỏ tới nó trong mỗi mục ServableData được phát ra. Sáng tạo của nhà nước chia sẻ đắt tiền hoặc lớn nên được hoãn lại đến áp dụng đầu tiên Loader :: Load () cuộc gọi, tức là chi phối bởi người quản lý. Tương tự, các Loader :: Unload () cuộc gọi đến thể phân phát thức sử dụng trạng thái chia sẻ đắt / lớn nên xé nó xuống.

Người xây dựng và Người phá hủy

~Source ()

Các loại công khai

AspiredVersionsCallback sử dụng
std::function< void(const StringPiece servable_name, std::vector< ServableData< T >> versions)>
Một callback cho một nguồn lên phiên bản cung (s) của một thể phân phát đến một mục tiêu, được nạp.

Chức năng công cộng

SetAspiredVersionsCallback ( AspiredVersionsCallback callback)=0
virtual void
Cung cấp một Asp mong mỏiVersionsCallback để sử dụng. Có thể được gọi nhiều nhất một lần.

Các loại công khai

AspedlyVersionsCallback

std::function< void(const StringPiece servable_name, std::vector< ServableData< T >> versions)> AspiredVersionsCallback

Một callback cho một nguồn lên phiên bản cung (s) của một thể phân phát đến một mục tiêu, được nạp.

Một lệnh gọi lại liên quan đến một luồng có thể phục vụ duy nhất (được cung cấp bởi 'servable_name'). Tất cả các phiên bản được cung cấp trong cuộc gọi phải dành cho dịch vụ được xác định trong 'servable_name'. Các lời mời trên các luồng có thể phục vụ khác nhau là trực giao với nhau.

Nhiều lệnh gọi có thể cung cấp các đối tượng dữ liệu dịch vụ có id giống hệt nhau (tức là cùng tên và phiên bản dịch vụ). Các đối tượng dữ liệu có thể phục vụ như vậy được coi là tương đương về mặt ngữ nghĩa. Người nhận cuối cùng sẽ giữ lại một và loại bỏ phần còn lại.

Nếu một phiên bản dịch vụ V được cung cấp trong lần gọi đầu tiên và sau đó bị bỏ qua trong lần gọi thứ hai, hàm ý của việc bỏ qua V phụ thuộc vào ngữ nghĩa của Mục tiêu của lệnh gọi lại. Một số Mục tiêu nhất định sẽ giải thích sự thiếu sót của V như một chỉ dẫn ngầm để dỡ bỏ V. Mỗi Mục tiêu phải ghi lại ngữ nghĩa của nó về vấn đề này.

Chức năng công cộng

SetAsposystemVersionsCallback

virtual void SetAspiredVersionsCallback(
  AspiredVersionsCallback callback
)=0

Cung cấp một Asp mong đợiVersionsCallback để sử dụng. Có thể được gọi nhiều nhất một lần.

~ Nguồn

virtual  ~Source()=default