Qu'est-ce qu'un objet actif?
En programmation informatique et en ingénierie, un objet actif est un type de modèle de conception qui peut être utilisé pour 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 de pouvoir recevoir et traiter les entrées d'objets externes sans forcer les objets externes à attendre la fin de l'exécution. Ce mécanisme permet également à de nombreux objets s'exécutant simultanément d'utiliser des objets actifs sans possibilité de blocage prolongé pendant lequel les processus concurrents doivent s'arrêter et attendre l'accès. Pour ce faire, le plus souvent consiste à envelopper les objets actifs dans une interface accessible au public, appelée proxy, puis à implémenter 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 aux objets actifs, puis poursuivent leur traitement jusqu'à ce que l'objet actif traite le message, puis informent les objets appelants des résultats afin qu'ils puissent 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 en tant que relais de serveur de discussion, dans lequel des objets distants contactent l'objet passif pour transmettre un message à tous les autres utilisateurs du serveur. Chaque fois que l'objet serveur passif reçoit un message de discussion d'un objet distant, il doit immédiatement gérer la demande, puis envoyer immédiatement la sortie, pendant que l'objet distant interrompt sa propre exécution jusqu'à ce que le processus soit terminé, ce que l'on appelle un blocage. La création de différents threads dans le programme peut résoudre le problème du blocage de l'exécution, mais pose ensuite des problèmes de synchronisation.
Dans un modèle de conception d'objet actif, le même objet serveur dans l'exemple ci-dessus serait exécuté dans son propre thread, distinct des autres objets. Il serait également encapsulé dans un type d'interface connu sous le nom de proxy qui s'exécute également dans un thread séparé, parfois le thread d'exécution principal du programme. Lorsqu'un objet distant souhaite que l'objet serveur envoie un message de discussion, 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'elle transmet à une file d'attente pour que l'objet actif soit traité. À ce stade, l'interface proxy et l'objet distant sont libres de continuer à s'exécuter et ne sont pas bloqués. Pendant ce temps, l’objet actif garde la file d’attente vide et traite chaque message entrant. Si l'objet appelant requiert 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.