Qu'est-ce qu'un objet actif?
Dans la programmation et l'ingénierie informatiques, un objet actif est un type de modèle de conception qui peut être utilisé pour aider à garantir que certains services sont toujours disponibles dans un système multithread ou simultané. Un objet actif est un objet qui implémente un mécanisme afin qu'il puisse recevoir et traiter l'entrée d'objets externes sans forcer les objets externes à attendre que l'exécution se termine. Ce mécanisme permet également à de nombreux objets qui pourraient tous s'exécuter simultanément pour utiliser des objets actifs sans la possibilité de longs temps de blocage dans lesquels les processus simultanés doivent s'arrêter et attendre l'accès. Ceci est le plus souvent réalisé en emballage les objets actifs dans une interface accessible au public, appelée proxy, puis en implémentant un type de système de file d'attente à l'intérieur des objets afin que les messages soient stockés pour un traitement ultérieur. Cela crée un modèle de conception dans lequel les objets envoient des messages à des objets actifs, puis continuent leur traitement jusqu'à ce que l'objet actif traite le message et informe ultérieurementles objets appels des résultats pour pouvoir mettre à jour leurs états en conséquence.
En dehors d'un modèle de conception d'objet actif, un objet normal peut être appelé un objet passif. Dans un exemple de programme simple, un objet passif peut agir comme un relais de serveur de chat, dans lequel les objets distants contactent l'objet passif pour transmettre un message à tous les autres sur le serveur. Chaque fois que l'objet de serveur passif reçoit un message de chat à partir d'un objet distant, il doit gérer immédiatement la demande, puis envoyer immédiatement la sortie, tout tandis que l'objet distant arrête sa propre exécution jusqu'à ce que le processus soit terminé, un effet appelé blocage. La création de différents threads au sein du programme peut résoudre le problème du blocage de l'exécution, mais déclenche ensuite des problèmes de synchronisation.
Dans un modèle de conception d'objet actif, le même objet de serveur dans l'exemple ci-dessus serait l'exécution dans son propre thread séparé duautres objets. Il serait également enveloppé dans un certain type d'interface appelé proxy qui s'exécute également dans un thread séparé, parfois le fil d'exécution du programme principal. Lorsqu'un objet distant veut demander à l'objet serveur d'envoyer un message de chat, il contacte l'objet proxy, lui transmet toutes les informations requises, puis revient à son état d'exécution normal au lieu d'attendre.
L'interface proxy convertit ensuite les informations de l'objet distant en un message qu'il passe à une file d'attente pour l'objet actif à traiter. À ce stade, l'interface proxy et l'objet distant sont libres de continuer à exécuter et ne sont pas bloqués. En attendant, l'objet actif fonctionne pour maintenir la file d'attente vide, traitant chaque message entrant. Si l'objet appelant nécessite que certaines informations soient renvoyées par l'objet actif, une structure de rappel peut être utilisée pour informer l'objet distant de tout changement d'état.