Bonjour à tous !

Je viens ici poser une question non pas d'aide pour un projet en particulier, mais un peu ouverte. Elle s'applique notamment au Python, du fait qu'il ne soit pas une bête de course, mais pas que.
J'ai remarqué que quand j'ouvre un programme, n'importe lequel, il met quelques secondes à s'ouvrir (par exemple une dizaine pour Firefox) alors que seuls 20% de la capacité de mes processeurs sont utilisés. On peut se dire qu'il y aurait moyen d'accélérer fortement la vitesse d'ouverture du programme... Cela s'explique par le fait que la mémoire vive ne s'écrit pas instantanément, mais je ne pense pas que ce soit la seule raison ; je me disais également que cela peut venir de l'ordre dans lequel s'exécutent les opérations logiques dans les processeurs... Je m'explique : quand nous écrivons un programme basique, c'est une suite d'instructions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
nom=input('Entrez votre nom : ')
print("Vous vous appelez :",nom)
Dans ce cas, on ne peut pas changer l'ordre des actions, puisque print utilise une variable qui dépend d'une commande qui doit être antérieure. Mais maintenant, regardez ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
image_origine=capture()#on imagine que cela renvoi l'image de la webcam (en 256 couleurs) sous forme de bytes
image_sortie=[]
#notez qu'il serait tout à fait possible d'exécuter ces 2 premières lignes en parallèle sans compromettre les résultats du programme
for pixel in image_origine :
    image_sortie.append(255-pixel)#met l'image en négatif
image_sortie=bytes(image_sortie)
C'est le genre de traitement qui demande du temps. Mais ici les pixels sont traités les uns à la suite des autres, on doit donc attendre que le pixel n soit fini d'être traité (ce qui prend assez peu de puissance) pour traiter le pixel n+1. C'est une perte de temps énorme ! On pourrait tout traiter en parallèle (un premier thread s'occupe des 100 premiers octets, un 2e qui fait les 100 suivants...). C'est d'ailleurs pour ça que les cartes graphiques ont été imaginées : pour traiter un maximum de choses en parallèle. Je me demande si on pouvait également utiliser de simples processeurs de cette manière au maximum de leurs capacités, car je vois rarement un programme python, même lorsqu'il tourne à fond, faire dépasser les 50% du CPU utilisés. Alors si mes connaissances dans le domaine restent limités et très théoriques, je me posais quelques questions :
- Est-ce qu'il est utile de considérer cela quand on programme (les gains de temps sont-ils substantiels ?) ?
- Si oui, comment utiliser la capacité maximale des processeurs pour réduire le temps de calcul (est-ce que programmer avec le module Thread suffirait par exemple ?) ?

Merci d'avance de vos réponses !

EDIT : J'ai trouvé cet article qui parle brièvement de ce genre de notions, ce qui n'enlève pas l'intérêt de la discussion