Quelle est la différence entre la programmation multiprocesseur et la programmation multicœur ? Montrez de préférence des exemples en python comment écrire un petit programme pour la programmation multiprocesseur et la programmation multicœur.
Réponses
Trop de publicités?La programmation "multiprocesseur" ou "multicœur" n'existe pas. La distinction entre "multiprocesseur" et "multicore" est la suivante ordinateurs n'est probablement pas pertinent pour vous en tant que programmeur d'application ; il s'agit de subtilités sur la façon dont les cœurs partagent l'accès à la mémoire.
Pour tirer parti d'un ordinateur multicœur (ou multiprocesseur), vous avez besoin d'un programme écrit de manière à pouvoir être exécuté en parallèle, et d'un moteur d'exécution qui permettra au programme d'être effectivement exécuté en parallèle sur plusieurs cœurs (et d'un système d'exploitation, bien que tout système d'exploitation que vous pouvez exécuter sur votre PC le fera). C'est vraiment parallèle la programmation, bien qu'il existe différentes approches de la programmation parallèle. Celles qui sont pertinentes pour Python sont le multiprocessing et le multithreading.
Dans des langages comme C, C++, Java et C#, vous pouvez écrire des programmes parallèles en exécutant plusieurs threads. Le verrouillage global de l'interpréteur dans les moteurs d'exécution CPython et PyPy exclut cette option, mais uniquement pour ces moteurs d'exécution. (Selon mon opinion personnelle, le multithreading est dangereux et délicat et c'est généralement une bonne chose que Python vous encourage à ne pas le considérer comme un moyen d'obtenir un avantage en termes de performances).
Si vous voulez écrire un programme parallèle qui peut s'exécuter sur plusieurs cœurs en Python, vous avez plusieurs possibilités :
- Écrire un programme multithread en utilisant le
threading
et l'exécuter dans le runtime IronPython ou Jython. - Utilisez le
processing
(maintenant inclus dans Python 2.6 en tant que modulemultiprocessing
), pour exécuter votre code dans plusieurs processus à la fois. - Utilisez le
subprocess
pour exécuter plusieurs interprètes python et communiquer entre eux. - Utilice Torsadé y Ampoule . Cela présente l'avantage d'exécuter votre code non seulement sur différents processus, mais aussi (si vous ne partagez pas l'accès à des éléments tels que les fichiers) potentiellement sur différents ordinateurs.
Quelle que soit l'option que vous choisissez, vous devrez comprendre comment diviser le travail effectué par votre programme en morceaux qui ont un sens pour la séparation. Comme je ne suis pas sûr du type de programmes que vous envisagez d'écrire, il serait difficile de fournir un exemple utile.
Comme mentionné dans un autre article, Python 2.6 dispose de la fonction multitraitement qui peut tirer parti de plusieurs cœurs/processeurs (il contourne la GIL en démarrant plusieurs processus de manière transparente). Il offre quelques primitives similaires au module threading. Vous trouverez quelques exemples (simples) d'utilisation dans les pages de documentation.
Vous pouvez en fait écrire des programmes qui utiliseront plusieurs processeurs. Vous ne pouvez pas le faire avec des threads à cause du verrou GIL, mais vous pouvez le faire avec des processus différents. Soit :
- utiliser le sous-processus et divisez votre code pour exécuter un processus par processeur
- jeter un coup d'œil à parallelpython module
- si vous utilisez python > 2.6, jetez un coup d'œil à l'outil multiprocessus module.
Si je comprends bien, Python dispose d'un dispositif appelé GIL (Global Interpreter Lock) qui empêche effectivement de tirer parti du multicore lorsqu'on utilise plusieurs threads en Python.
Voir par exemple l'article de Guido van Rossum. entrée de blog sur le sujet. Pour autant que je sache, parmi les langages "grand public", seuls C/C++ et Java disposent d'un support efficace pour le multicore.
Vous pouvez vous renseigner sur le multithreading en python et sur le threading en général.
Multithreading en Python : http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/