przepływ tensorowy:: porcja:: Źródło

To jest klasa abstrakcyjna.

#include <source.h>

Abstrakcja dla modułu, który pozyskuje serwable do załadowania lub, dokładniej, obsługuje dane, które mogą być użyte do załadowania tych serwowali.

Streszczenie

Przykłady takich sposobów obsługi danych to:

  • ścieżka systemu plików do zserializowanej mapy słownika
  • uchwyt do przychodzącego RPC, który określa model uczenia maszynowego do załadowania
  • Loader (patrz loader.h ) Uchwyty danych są na ogół zakłada się, że mały.

Źródło monitoruje jakieś zewnętrzne źródło (np systemu plików, połączenia RPC), aby dowiedzieć się o nowych servables i / lub nowe wersje servables i / lub konieczności rozładunku wersje servable. Wykorzystuje dostarczonego zwrotnego instruowania moduł docelowych (np AspiredVersionsManager ), która wersja (a) danego servable do obciążenia. Ponadto, w zależności od semantyki modułu docelowego, Źródło domyśle nakazuje to, które z nich rozładunku pomijając te servables.

Częstym przypadkiem jest, że źródło emituje wersje dla dokładnie jednego servable. Jeszcze prostszym przypadkiem jest to, że serwable ma jedną, statyczną wersję przez cały okres istnienia serwera.

Źródła mogą zawierać stan, który jest współdzielony przez wiele wyemitowanych usług, np.

  1. Współdzielona pula wątków lub inny zasób, z którego korzysta wiele serwerów.
  2. Wspólna struktura danych tylko do odczytu, z której korzysta wiele serwerów, aby uniknąć narzutu czasowego i przestrzennego związanego z replikacją struktury danych w każdej możliwej do udostępnienia instancji. Stan współdzielony, którego czas i rozmiar inicjalizacji jest znikomy (np. pule wątków) może być chętnie tworzony przez źródło, które następnie osadza wskaźnik do niego w każdym emitowanym elemencie ServableData. Stworzenie drogiego lub dużych dzielonego państwa powinna zostać odroczona do pierwszego obowiązującego ładowarki :: load () połączenia, tj rządzonym przez kierownika. Symetrycznie, ładowarki :: Unload () wezwanie do ostatecznego servable pomocą drogie / duży stan współdzieloną należy zburzyć.

Konstruktory i destruktory

~Source ()

Typy publiczne

AspiredVersionsCallback za pomocą
std::function< void(const StringPiece servable_name, std::vector< ServableData< T >> versions)>
Zwrotna za źródło do wersji zasilania (ów) z servable do celu, który ma być załadowany.

Funkcje publiczne

SetAspiredVersionsCallback ( AspiredVersionsCallback callback)=0
virtual void
Dostarcza AspiredVersionsCallback do użycia. Można zadzwonić co najwyżej raz.

Typy publiczne

Aspirowane wersjeOddzwanianie

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

Zwrotna za źródło do wersji zasilania (ów) z servable do celu, który ma być załadowany.

Pojedyncze wywołanie wywołania zwrotnego dotyczy pojedynczego serwowalnego strumienia (podanego przez „servable_name”). Wszystkie wersje dostarczone w wywołaniu muszą być dla serwowalnego określonego w 'servable_name'. Wywołania w różnych serwowalnych strumieniach są względem siebie ortogonalne.

Wiele wywołań może dostarczyć obiekty serwowalnych danych o identycznych identyfikatorach (tj. tej samej serwowalnej nazwie i wersji). Takie serwowalne obiekty danych są traktowane jako semantycznie równoważne. Odbiorca ostatecznie zatrzyma jeden, a resztę odrzuci.

Jeśli serwowalna wersja V jest dostarczana w pierwszym wywołaniu, a następnie pominięta w drugim wywołaniu, implikacja pominięcia V zależy od semantyki obiektu Target wywołania zwrotnego. Niektóre Cele będą interpretować pominięcie V jako niejawną instrukcję wyładowania V. Każdy Cel musi w tym względzie udokumentować swoją semantykę.

Funkcje publiczne

SetAspiredVersionsCallback

virtual void SetAspiredVersionsCallback(
  AspiredVersionsCallback callback
)=0

Dostarcza AspiredVersionsCallback do użycia. Można zadzwonić co najwyżej raz.

~Źródło

virtual  ~Source()=default