Progettazione di applicazioni multi-threading - pattern comuni

 

    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 :   |  

Print | posted @ venerdì 16 maggio 2008 04:40

Comments have been closed on this topic.