10
votes

Modèle de filetage OSGI

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.


0 commentaires

4 Réponses :


10
votes

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.


3 commentaires

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!



4
votes

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 , 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.


0 commentaires

4
votes

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.

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.

Je n'ai trouvé aucune différence entre variables statiques et variable locale dans la méthode de service.


0 commentaires

0
votes

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.


0 commentaires