flusso tensoriale:: servendo:: Fonte

Questa è una classe astratta.

#include <source.h>

Un'astrazione per un modulo che genera i servable da caricare o, più precisamente, gestisce i dati che possono essere utilizzati per caricare quei servable.

Riepilogo

Esempi di tali handle di dati sono:

  • un percorso del file system per una mappa del vocabolario serializzato
  • un handle per un RPC in entrata che specifica un modello appreso dalla macchina da caricare
  • un caricatore (vedi loader.h ) Le maniglie di dati sono generalmente presume essere di piccole dimensioni.

Una fonte controlla qualche risorsa esterna (ad esempio, file system, le chiamate RPC) per scoprire nuove servables e / o nuove versioni di servables e / o la necessità di scaricare le versioni pubblicabili. Esso utilizza il callback fornito per istruire un modulo di destinazione (es AspiredVersionsManager ) quale versione (s) di un dato servibile di carico. Inoltre, a seconda delle semantica del modulo di destinazione, la sorgente implicitamente indica che quelli da scarico omettendo tali servables.

Un caso comune è che una sorgente emette versioni per esattamente un servibile. Un caso ancora più semplice è che un servable ha un'unica versione statica per tutta la durata del server.

Le sorgenti possono ospitare lo stato condiviso tra più servibili emessi, ad es

  1. Un pool di thread condiviso o un'altra risorsa utilizzata da più server.
  2. Una struttura di dati di sola lettura condivisa utilizzata da più servable, per evitare il sovraccarico di tempo e spazio di replicare la struttura di dati in ogni istanza di servable. Lo stato condiviso il cui tempo e dimensione di inizializzazione sono trascurabili (ad esempio i pool di thread) può essere creato avidamente dall'origine, che quindi incorpora un puntatore ad esso in ogni elemento ServableData emesso. Creazione di costosi o grande stato condiviso dovrebbe essere rinviata alla prima applicabile Loader :: Load () chiamata, cioè governata dal gestore. Simmetricamente, il Loader :: Scarico () chiamata al servibile finale utilizzando il costoso / grande stato condiviso dovrebbe tirarlo giù.

Costruttori e Distruttori

~Source ()

tipi pubblici

AspiredVersionsCallback usando
std::function< void(const StringPiece servable_name, std::vector< ServableData< T >> versions)>
Un callback per una sorgente alla versione di alimentazione (s) di un servibile ad un target, da caricare.

Funzioni pubbliche

SetAspiredVersionsCallback ( AspiredVersionsCallback callback)=0
virtual void
Fornisce un AspiredVersionsCallback da usare. Può essere chiamato al massimo una volta.

tipi pubblici

Versioni Aspirate Richiamata

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

Un callback per una sorgente alla versione di alimentazione (s) di un servibile ad un target, da caricare.

Una singola invocazione del callback riguarda un singolo stream pubblicabile (dato da 'servable_name'). Tutte le versioni fornite in una chiamata devono essere per il servable identificato in 'servable_name'. Le invocazioni su diversi flussi utilizzabili sono ortogonali tra loro.

Invocazioni multiple possono fornire oggetti di dati utilizzabili con ID identici (cioè stesso nome e versione del server pubblicabile). Tali oggetti dati servibili sono trattati come semanticamente equivalenti. Il destinatario alla fine ne conserverà uno e scarterà il resto.

Se una versione V servebile viene fornita in una prima invocazione e successivamente omessa da una seconda invocazione, l'implicazione dell'omissione di V dipende dalla semantica del Target della richiamata. Alcuni Target interpreteranno l'omissione di V come un'istruzione implicita per scaricare V. Ciascun Target deve documentare la propria semantica al riguardo.

Funzioni pubbliche

ImpostaVersioniAspirateRichiamata

virtual void SetAspiredVersionsCallback(
  AspiredVersionsCallback callback
)=0

Fornisce un AspiredVersionsCallback da usare. Può essere chiamato al massimo una volta.

~Fonte

virtual  ~Source()=default