En Java, je crée 256 threads qui communiquent entre eux en utilisant le socket réseau. Tous ces 256 threads s'exécutent en parallèle. Lorsqu'un thread est généré, il essaie de se connecter à ses threads voisins. La liste des voisins peut être arbitraire. Dans cette situation, comment faire en sorte que tous les fils créent un lien avec leurs voisinsjava network accepte la connexion réseau entre les threads
- sans blocage
- sans une topologie en étoile (nœud central)
Afin de former une connexion entre deux threads, un thread doit ouvrir un ServerSocket et d'autres thread doit rejoindre il. À l'heure actuelle, je suis en utilisant un algorithme simple:
for all edges
do
if edge.tid > my tid
then
connect to edge.ip
endif
done
for all edges
do
if edge.tid < my tid
then
accept connection from edge.ip
endif
done
Comme vous pouvez le voir ci-dessus, je suis d'abord CONNexION à grands voisins et je suis en attente de plus petit voisin de se connecter à moi. Cela peut entraîner un blocage lorsque la table de quartier semble donné ci-dessous:
t0 -> t3, t1
t1 -> t2, t0
t2 -> t1
t3 -> t0
Tout algorithme spécifique dans votre esprit qui est une impasse libre ?? Mon algorithme utilise des méthodes de connexion et d'acceptation de blocage dans java. J'ai le sentiment que cela peut être fait en utilisant des méthodes non bloquantes, mais je veux d'abord connaître les autres idées. FYI, mon algorithme fonctionne parfaitement bien pour une topologie maillée (du moins je pense que oui).
non. Comme vous le voyez, je le fais déjà. ti essaye de se connecter à tj seulement si ti
désolé mais la partie que je ne comprends pas est: où est la table de voisinage que vous avez exposée ou qui vient? si ce n'est pas une sorte de condition initiale. Je veux dire pour ce cas 't0 -> t3 et t0 -> t3, t1' cette combinaison ne serait pas acceptable pour' t1 -> t2, t0 et t2 -> t1' – emecas