J'ai recherché Internet mais j'ai échoué à trouver une réponse satisfaisante. Quel est le modèle de threading présent dans un conteneur OSGI? Est-ce que cela apparaît simplement un nouveau fil à chaque forfait enregistré par exemple? Toute référence concernant le modèle de threading serait super. P>
4 Réponses :
Vous n'avez rien trouvé car il n'existe pas de "modèle de filetage OSGI". Les faisceaux existent simplement et ne "ont" pas de threads "à moins qu'ils ne les commencent. P>
Je suis toujours confus. Vous voulez dire que si les fils de fourche en paquets sont juste une seule exécution filetée? Dans ce scénario, comment fonctionne le multitâche? Par exemple, un ensemble peut effectuer un calcul lorsque un autre paquet servant une demande de réseau. Comment le scénario comme celui-ci est-il traité dans le cadre? Désolé pour mon ignorance.
Oui, les faisceaux sont libres de créer des threads comme ils en ont besoin. Si un paquet fait un calcul à long terme ou une demande de réseau, ces choses se produisent généralement dans des threads créés par le paquet. Veuillez lire le chapitre de la concurrence de mon livre (gratuit, mais inachevé): NJBartlett.name/osgibook.html
Wow, Neil - c'est un excellent livre! Oh, et je viens de voir que tu parles de DS aussi - j'ai hâte d'y arriver. J'espère que vous continuerez à l'écrire et j'achèterais une copie papier!
Le cadre OSGI suit un modèle synchrone, c'est-à-dire. Tout se passe dans un ordre strict. Les faisceaux ne sont pas exécutés dans des threads (mais ils ont leurs propres instances de classe de classe). Il y a des exceptions, cependant. Par exemple, lorsqu'un événement est soulevé via la méthode posefent em>, la livraison de l'événement est effectuée de manière asynchrone, généralement mise en œuvre dans de nombreuses implémentations-cadres comme thread. P>
Lorsque vous démarrez un paquet, le code dans l'activateur est exécuté dans un fil, similaire au fil "principal". Lorsque le fil principal complète son exécution, Bundle est modifié de l'état "Démarrer" à l'état "Actif". Il est donc préférable d'exécuter du code consommateur de temps dans un autre fil et de démarrer un autre fil du fil principal. p>
Lorsque la méthode de service est appelée du consommateur de service. A cette époque, le code écrit dans la méthode de service est exécuté dans le fil du consommateur de service. p>
Je n'ai trouvé aucune différence entre variables statiques et variable locale dans la méthode de service. p>
Outre certains cas spéciaux (événements / auditeurs), les threads d'application sont gérés ni restreints. Vous pouvez utiliser le filetage librement. Vous devez être conscient que certaines opérations dans la vie de paquet doivent être sûres (donc) threads en toute sécurité et vous devez être très prudent pour détacher les fils proprement. Vous devez également faire attention à ne pas bloquer les opérations OSGI inutilement longtemps. P>