Est-il une différence entre concurrence et parallélisme en java?
J'ai fait quelques recherches dans Google et ne peux pas tout à fait obtenir ma tête autour de la différence (le cas échéant) entre simultanée et parallèle des programmes en java. Certaines des informations que j'ai regardé suggère pas de différences entre les deux. Est-ce le cas??
- Double Possible:stackoverflow.com/questions/1897993/...
- Double question, tout aussi faible de réponses, malheureusement.
- Par tous les moyens, de contribuer à un non-faible réponse.
- J'ai eu un aller, mais la mienne est trop faible!
Vous devez vous connecter pour publier un commentaire.
Cela dépend de qui est à définir. Les personnes qui ont créé l'Aller langage de programmation appel code Simultanées si elle est brisée en morceaux, qui pourrait être traités en parallèle, alors que le Parallélisme implique que ces morceaux sont effectivement en cours d'exécution en même temps.
Puisque ce sont des principes de programmation, le langage de programmation n'a aucune influence sur la façon dont ils sont définis. Cependant, Java 8 aura le plus de fonctionnalités pour permettre à la fois de concurrence et parallélisme sans perturber le fonctionnement de votre code de trop. Par exemple, un code comme ceci:
... ce qui est un non-cumul et de non-parallèle, pourrait être écrit comme ceci (ma syntaxe est probablement faux, mais j'espère que vous voyez l'idée):
Le code ci-dessus est écrit dans un simultanées manière: aucune donnée code exige que le coolItems être filtré à un moment, ou que vous ne pouvez appeler
getId()
sur un seul élément à la fois, ou même que les éléments au début de la liste doivent être filtrés ou mappé avant éléments à la fin. En fonction du type deIterable
est retourné à partir degetItems()
, les opérations peuvent ou peuvent ne pas s'exécuter en parallèle, mais le code que vous avez écrit est simultanées.Également d'intérêt:
Je suppose que cela dépend de vos définitions, mais ma compréhension va à peu près comme ceci:
Autant que je sache, ni le terme est Java spécifiques, ou à des Java-nuances spécifiques.
Parallélisation (ou Parallélisme ou de calcul Parallèle) est une forme de calcul dans laquelle de nombreux calculs sont effectués simultanément. En substance, si un CPU intensive problème peut être divisé en plus petites tâches indépendantes, ces tâches peuvent être attribuées à différents processeurs
Simultanéité est plus sur le multitâche qui est de l'exécution de beaucoup d'actions, mais pas nécessaire de l'UC problème.
Je ne pense pas que les deux termes sont bien définis significations distinctes. Ils sont les deux termes de l'art, plutôt que de termes techniques.
Cela dit, la façon dont je les interpréter, c'est que quelque chose est simultanées si cela peut être fait en même temps que d'autres choses, et parallèle si cela peut être fait par plusieurs threads en même temps. Je profite de cette utilisation en grande partie de la La JVM de collecte des ordures de la documentation, qui dit des choses comme
et
Certes, c'est un contexte très spécifique, et c'est sans doute imprudent de généraliser à partir d'elle.
Si vous programmez à l'aide de threads (programmation simultanée), il n'est pas nécessairement à être exécuté en tant que tel (l'exécution en parallèle), car elle dépend de la machine peut gérer plusieurs threads.
Voici un exemple visuel. Les Threads d'une non filetée de la machine:
Threads sur une tige de machine:
Les tirets représentent le code exécuté. Comme vous pouvez le voir, ils ont tous deux séparés et exécuter séparément, mais le filetage de la machine peut exécuter plusieurs pièces à la fois.
Veuillez consulter cette Quelle est la différence entre la programmation simultanée et parallèle de la programmation?
De la documentation d'oracle page:
Dans un processus multithread sur un seul processeur, le processeur peut basculer de l'exécution des ressources entre les threads, résultant en une exécution simultanée.
Dans le même processus multithread dans un à mémoire partagée multiprocesseur environne det, chaque thread dans le processus peut s'exécuter sur un processeur séparé dans le même temps, résultant en l'exécution en parallèle.
Lorsque le processus a moins ou autant de threads qu'il y a de processeurs, les threads système de soutien en conjonction avec l'environnement d'exploitation s'assurer que chaque thread s'exécute sur un processeur différent.
Java SE 7 renforcée traitement parallèle en ajoutant ForkJoinPool API.
Consultez ci-dessous les postes pour plus de détails:
La programmation parallèle avec les threads en Java ( Java spécifique )
La simultanéité vs Parallélisme - Quelle est la différence? De la langue ( agnostique)
La simultanéité est une architecture de modèle de conception, ce qui vous permet d'exécuter plusieurs opérations à la fois (qui peuvent, mais ne doivent être exécutées en parallèle).
Dans le cas d'une base unique de l'exécution de ces opérations, parallelizm peut être "simulé", comme par exemple, la commutation de contexte ( en supposant que votre langage de programmation utilise des threads pour l'exécution en parallèle).
Disons que vous avez deux fils, dans l'une de vous mettre en file d'attente des emplois. Deuxième on attend jusqu'à tout travail existe et elle ramasse pour l'exécution. Malgré l'utilisation d'un processeur simple cœur, deux d'entre eux sont en cours d'exécution et de communication (via la file d'attente).
C'est une exécution en simultané - même à travers les threads sont exécutées de manière séquentielle sur un seul core (partager).
Version parallèle du même exercice serait similaire avec une différence:
Exécution des threads allait se passer sur un processeur multi-core. Les Threads de s'exécuter en parallèle les uns des autres et non de manière séquentielle (chacun sur son propre cœur).