modello "Worker object pool"?

4

Nella mia domanda le richieste sono elaborate da oggetti di Processor classi classificate, qualcosa come CreateItemProcessor o MoveItemToGroupProcessor . La classe Base Processor implementa la maggior parte della logica di elaborazione comune e quelle derivate eseguono alcune attività correlate alla logica aziendale.

Un oggetto di un certo tipo di processore viene creato prima dell'elaborazione della richiesta, e poi cancellato in seguito.

Alla fine arrivò a una situazione, quando la creazione di un singolo oggetto del processore stava prendendo una parte importante del tempo di elaborazione della richiesta. Quindi ora sto pensando alla creazione di un pool di oggetti del processore di richiesta e riutilizzarli invece di utilizzare l'approccio di creazione / eliminazione.

Il problema qui è che ogni singolo oggetto Processor non è thread-safe, e in realtà non dovrebbe essere protetto dal rischio: memorizza i dati specifici della richiesta all'interno. Quindi il mio approccio generale a questo è il seguente:

  • Prova ad acquisire "processore" da un pool;
  • Se non ce ne sono disponibili, attendi;
  • Quando è disponibile il processore, contrassegnalo come "funzionante" e avvia l'elaborazione;
  • Al termine del lavoro, "restituisci" il processore al pool;
  • Notifica pool che il processore gratuito è disponibile.

Esiste una sorta di modello di progettazione per questo? Mi sto perdendo qualcosa dai pattern GoF esistenti? Eventuali dettagli di implementazione relativi a C #?

    
posta mikalai 23.11.2011 - 11:13
fonte

2 risposte

5

Sì, c'è ed è denominato (piuttosto non sorprendentemente) Pool di oggetti : -)

Googling per un'implementazione C # ti fa apparire un thread StackOverflow nel primo posto.

    
risposta data 23.11.2011 - 12:33
fonte
0

Penso che tu stia parlando del modello FlyWeight: link Viene utilizzato nei pool di connessione ThreadPool o database.

Riguardo all'implementazione - È possibile avere una coda (s) di processori disponibili. Su richiesta arriva il processore pop e lo ritorna in coda dopo il completamento. In questo caso il tuo processore può essere thread non sicuro. Tuttavia, è necessario sincronizzare l'accesso in coda.

    
risposta data 23.11.2011 - 11:49
fonte

Leggi altre domande sui tag