Question

Lors de l’utilisation de threads, je les visualise parfois en train de tisser ensemble des interconnexions tridimensionnelles ou plus entre des objets dans un contexte spatial. Ce n'est pas un scénario d'usage général, mais pour ce que je fais, c'est un moyen utile d'y penser.

Y a-t-il des API que vous utilisez qui threads d'aide?

Avez-vous utilisé des threads d’une manière qui n’est pas conceptualisée en tant que processus étant un processus?

Était-ce utile?

La solution

Y a-t-il des API que vous utilisez qui threads d'aide?

Vous voulez dire en dehors de java.util.concurrent ? FunctionalJava a obtenu quelques constructions qui facilitent la programmation simultanée, comme décrit dans un tutoriel en plusieurs parties qui démarre ici .

Avez-vous utilisé des threads d'une manière qui ne soit pas conceptualisée en tant que processus étant un processus?

Oui, dans la mesure où les threads ne conceptualisent pas du tout. Prenez un exécuteur de tâches asynchrone par exemple. Il utilise des fils sous les couvertures mais je ne les vois pas et je m'en fiche. Ils sont entièrement gérés par le gestionnaire de tâches.

Sous les couvertures, il n’ya que des threads, mais lorsque nous arrêtons de nous intéresser à chaque thread et que nous les considérons comme un certain nombre d’espaces où vous pouvez en quelque sorte insérer du code et le faire fonctionner pendant un certain temps, puis c'est à ce moment-là que nous commençons à atteindre un niveau d'abstraction plus élevé.

Les agents / acteurs sont un moyen courant de le faire. Un acteur est comme un fil qui a un bloc d’état, et vous pouvez ensuite lui envoyer du code et dire "faites-le à votre état quand vous avez le temps". ou quelque chose du genre.

Autres conseils

Tout d'abord

Clause de non-responsabilité habituelle: la programmation simultanée, dans n’importe quel langage, quel que soit le niveau d’abstraction utilisé, est difficile et compliquée et comporte de nombreux risques. Prendre en compte:

  • La programmation simultanée complique toute application en fonction de la magnitude
  • Le test des sections critiques est difficile et parfois impossible
  • La reproduction de bogues provenant de code concurrent est très difficile et dépend beaucoup de l'architecture, de la version du système d'exploitation, de la version, etc.

API Java simultanées

Java a fait beaucoup pour rendre la programmation simultanée aussi simple que possible pour les développeurs. Dans la plupart des cas, vous verrez que java.util.concurrent contient la plupart des abstractions dont vous aurez besoin:

  • Runnable et l'objet Thread que vous pouvez étendre. Ajoutez simplement votre code et vous avez un fil prêt à fonctionner
  • Un bel ensemble de exécuteurs : pool constant, pool dynamique, planifié ou autre. Il suffit de lancer un Runnable dessus et le reste.
  • Les
  • sémaphores et les verrous de toutes sortes vous évitent d'avoir à mettre en œuvre des techniques de verrouillage communes.
  • Une API wait () et notify () intégrée pour tous les objets.

Utilisations

En tant qu'ingénieur logiciel, il ne vous reste plus qu'à vous assurer que vous écrivez le code correct . Cela signifie que vous devez être conscient des situations dangereuses auxquelles vous pourriez vous exposer:

  • Blocage : situation dans laquelle deux ou plusieurs threads attendent des ressources non ordonnées, générant ainsi une boucle d'attente infinie.
  • Livelock : deux ou plusieurs discussions qui tentent poliment de céder la place à une autre sur une ressource partagée mais finissent par ne pas la prendre (considérez deux personnes se trouvant dans un couloir et se déplaçant constamment) ensemble d'un côté à l'autre)
  • Starvation : un seul thread occupe la plupart ou la totalité d'une seule ressource partagée, privant ainsi les autres threads de l'accès à celle-ci.

Point principal (ou quand utiliser)

Utilisez les threads uniquement lorsque la simultanéité améliore directement le comportement de vos applications.

Si vous attendez une ressource liée à un réseau, à un réseau ou à un matériel, DO (Générer) crée un thread afin que vous puissiez continuer à faire autre chose.

Si vous essayez simplement de fractionner avec élégance des calculs liés au processeur, NE PAS utiliser des threads. Vous risqueriez d’aggraver vos performances.

Si vous utilisez des threads, assurez-vous d'avoir soigneusement envisagé les risques et vérifié trois fois que vous ne manquiez aucune situation exceptionnelle.

Ressources utiles (en ligne)

Le moyen le plus rapide d'entrer dans les choses est de faire le didacticiel sur la simultanéité avec Sun . Sinon, procurez-vous un bon livre.

Bonne chance:)

La concurrence est un sujet complexe et complexe à couvrir. Des livres tels que La concurrence dans Java en pratique peuvent être utiles.

Voir Présentation des utilitaires de concurrence pour API sur le threading. BlockingQueue < E > peut être utile par exemple.

  

Une file d'attente prenant en charge en outre   les opérations qui attendent que la file d'attente   devenir non vide lors de la récupération d'un   élément et attendez que l’espace devienne   disponible dans la file d'attente lors du stockage d'un   élément.

Voir CountDownLatch

  

Une aide à la synchronisation qui permet de   ou plusieurs fils à attendre jusqu'à ce qu'un ensemble de   les opérations effectuées dans d'autres   les discussions se terminent.

et CyclicBarrier pour un comportement intéressant.

  

Une aide à la synchronisation qui permet à un   ensemble de discussions à tous attendre pour chaque   autre pour atteindre un point commun de la barrière.

Modifier : Je lis Java Concurrency in Practice maintenant. C'est très bien.

  

Lors de l’utilisation de threads, je les visualise parfois en train de tisser ensemble des interconnexions tridimensionnelles ou plus entre des objets dans un contexte spatial.

Cela semble compliqué. Comment conceptualisez-vous 600 threads par exemple? Pourquoi ne pas les considérer comme plusieurs threads d'exécution s'exécutant apparemment simultanément.

  

Y a-t-il des API que vous utilisez qui threads d'aide?

Je suggère que les premiers matchs que vous trouveriez soient les plus simples et les plus simples. http://www.google.co.uk/search?q=java+ discussions

  

Avez-vous utilisé des threads d’une manière qui n’est pas conceptualisée en tant que processus étant un processus?

Étant donné que les threads ne sont pas des processus, je ne peux pas dire que j’ai jamais considéré les threads comme des processus. (Sauf sur les anciennes versions de Linux) Les processus ne partagent pas la mémoire / les objets par défaut pour le moment, ils fonctionnent de manière totalement indépendante (généralement des programmes différents, éventuellement écrits dans différentes langues). Ils démarrent également différemment à l'aide de différentes API.

Certains pensent que le multi-threading est compliqué. En fait, je dirais le contraire. La programmation multi-thread nécessite de rendre votre code simple, facile à comprendre et simple à raisonner. Bien que cela prenne de l’expérience, votre objectif est la simplicité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top