Comincio col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i modelli a competizione e a sincronizzazione.
Active Objects pattern
Lo scopo è riconoscere quanti thread ci sono in una applicazione, distinguere i compiti di un thread da quelli di un altro e identificare come quando e chi crea nuovi thread.
L'esecuzione di un nuovo thread ha inizio in active object. Le istanze di active object sono in relazione 1 a 1 con i thread.
A un thread con un compito (per esempio quello restare in ascolto delle richieste di connessone di un client) cnrrisponde una classe di active object, a un thread con un compito differente (per esempio quello che esegue i comandi inviati dal client) corrisponde una classe differente.
Quando ci sono più thread con lo stesso compito ci saranno più istanze dalla stessa classe di active object. La cosa può essere evidenziata con una classe Factory piuttosto che con una Singleton.
Ho trovato l'idea degli Active Object sia nei documenti del Object Management Group sul UML (in fondo a questa pagina c'è l'estratto sugli active object http://www-inf.int-evry.fr/COURS/UML/notation/notation8a.html ) sia nel Portland Pattern Repository (qui http://c2.com/cgi/wiki?ActiveObject)
Ad esempio ...
una interfaccia IActiveObject con i metodi Run(), Cancel(), GetStatus() può identificare gli oggetti attivi di una applicazione
il nome della classe può richiamare il compito del thread e può avere il prefisso active object e/o la dicitura singleton per marcare che di quel tipo nella applicazione cen'è uno solo
la presenza di una classe omonima a un active object con il suffisso Factory può invece inidicare che thread con quel compito ce ne possono essere molti
tipo ListenerSingletonActiveObject e ClientCommandsReceiverActiveObject in coppia con ClientCommandsReceiversFactory
piuttosto che Listener: ISingleActiveObject e ClientCommandsReceiver: IActiveObjects in coppia con ClientCommandsReceiversFactory : IActiveObjectsFactory
Tags : Progettazione Software |