Multithreading synchrone en Java (Apache HTTPClient)

Je me demande comment j’y arriverais. Disons que je charge une liste de 1 000 mots et pour chaque mot, un fil est créé et dit qu’il effectue une recherche sur Google pour chaque mot. Le problème ici est évident. Je ne peux pas avoir de threads 1k, peut-être I. Gardez à l’esprit que je suis extrêmement novice en matière de threads et de synchronisation. Donc, fondamentalement, je me demande comment j’utiliserais moins de fils. Je suppose que je dois définir le nombre de threads à un nombre fixe et synchroniser les threads. Je me demandais comment faire avec Apache HttpClient en utilisant GetThread et ensuite l’exécuter. En cours d’exécution, j’obtiens les données de la page Web et les transforme en chaîne, puis vérifie si elle contient un certain mot.

Peut-être que vous pouvez regarder ce problème de cette façon.

Vous avez 1000 mots et pour chaque mot vous allez effectuer une recherche. En d’autres termes, il y a 1000 tâches à exécuter et elles ne sont pas liées les unes aux autres. Il n’est donc pas nécessaire de synchroniser ce problème en fonction de la définition suivante du wiki.

«En informatique, la synchronisation fait référence à l’un des deux concepts distincts mais liés: la synchronisation des processus et la synchronisation des données. La synchronisation des processus se réfère à l’idée que plusieurs processus doivent se joindre ou établir une liaison à un moment donné. accord ou s’engager dans une certaine séquence d’action La synchronisation des données se réfère à l’idée de conserver plusieurs copies d’un dataset en cohérence les unes avec les autres ou de maintenir l’intégrité des données ”

Donc, dans ce problème, vous n’avez pas besoin de synchroniser les 1000 processus qui exécutent les recherches de mots car ils peuvent s’exécuter indépendamment et n’ont pas besoin de joindre leurs forces. Ce n’est donc pas une synchronisation de processus.

Ce n’est pas une synchronisation de données non plus puisque les données de chaque recherche sont indépendantes des 999 autres recherches.

Par conséquent, lorsque Joshua dit que la synchronisation est quand je vous bloque, il n’y a pas besoin de blocage dans ce cas.

Oui, toutes les tâches peuvent être exécutées simultanément dans des threads différents. Bien entendu, votre système ne dispose peut-être pas des ressources nécessaires pour exécuter 1000 threads simultanément (lecture simultanée). Donc, vous avez besoin de concepts tels que des pools où un pool a un certain nombre de threads … dites s’il a 10 threads … alors ces 10 démarreront 10 recherches indépendantes sur 10 mots de votre liste. Si l’un d’entre eux en a terminé avec sa tâche, il se chargera de la tâche de recherche de mots suivante et le processus se poursuivra ….

Vous pouvez sûrement avoir autant de threads que vous le souhaitez. Mais en général, il n’est pas recommandé d’utiliser plus de threads que de cœurs de traitement sur votre ordinateur. Et n’oubliez pas que la création de 1000 sessions Internet à la fois affecte votre réseau. Une taille d’une page google unique est proche de 0,3 mégaoctets. Allez-vous vraiment télécharger 300 mégaoctets de données à la fois?

Au fait,

Il y a une chose amusante à propos de la concurrence. Certaines personnes disent: “la synchronisation est comme la concurrence”. Ce n’est pas vrai. La synchronisation est l’opposé de la concurrence. La concurrence est quand beaucoup de choses se passent en parallèle. La synchronisation est quand je vous bloque. (Joshua Bloch)