Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1580 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Différences de perfs entre foreach et array_map

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Différences de perfs entre foreach et array_map

n°1782155
rufo
Pas me confondre avec Lycos!
Posté le 03-09-2008 à 16:18:39  profilanswer
 

Je voudrais savoir si y'avait une différence de perf entre une bouche foreach et utiliser la fonction array_map()? En gros, est-ce que array_map() fait de la parallélisation?  (éventuellement sous certaines  conditions, style avec un cpu dual core)
 
Merci.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 03-09-2008 à 16:18:39  profilanswer
 

n°1782165
skeye
Posté le 03-09-2008 à 16:28:50  profilanswer
 

Le mieux est de tester, mais ça m'étonnerait fortement qu'il y ait une différence significative. Et la parallèlisation d'une seule exécution d'un script php tu crois au père noël je crois...


---------------
Can't buy what I want because it's free -
n°1782170
skeye
Posté le 03-09-2008 à 16:32:13  profilanswer
 

D'ailleurs je vois pas franchement l'intérêt qu'ils auraient à faire ça, du coté de la team php : php est fait principalement pour le web, et mieux vaut paralléliser pour traiter plusieurs requêtes à la fois que pour traiter plus vite une seule requête...[:petrus75]


---------------
Can't buy what I want because it's free -
n°1782180
rufo
Pas me confondre avec Lycos!
Posté le 03-09-2008 à 16:51:44  profilanswer
 

l'idée c'était qu'avec array_map(), ça aurait été bien que ça crée des thread pour chaque appel à la fonction callback :) Sur un dual core, ça aurait pu faire gagner en perf...
 
Mais bon, c'était un vœu pieu...

Message cité 1 fois
Message édité par rufo le 03-09-2008 à 16:52:10

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1782181
flo850
moi je
Posté le 03-09-2008 à 16:54:25  profilanswer
 

generalement, php est utilisé pour un site web  
et souvent, un site web a  plus de visiteur en // que de core [:proy]

n°1782182
MagicBuzz
Posté le 03-09-2008 à 16:54:31  profilanswer
 

ben non, rien n'indique que tes traîtements ne doivent pas être séquenciels. dont à ce moment ce sertait mal.

n°1782185
omega2
Posté le 03-09-2008 à 17:02:15  profilanswer
 

Code :
  1. <?php
  2. function test($v){
  3.  global $valeur;
  4.  $valeur = $v;
  5.  sleep(1);
  6.  return $valeur;
  7. }
  8.  
  9. $valeur=0;
  10. echo 'mon tableau ? ';
  11. print_r(array_map('test',array(0,1,2,3,4,5,6,7,8,9)););
  12. echo 'ma valeur finale : ' . $valeur;


 
Question1 : Si array_map traite toutes les cases en parallèle, qu'elle est la valeur de $valeur?
Question2 : Si array_map traite toutes les cases en parallèle, qu'est ce que php affiche?
 
 
Comme tu vois il n'est pas possible de traiter les différentes cases du tableau en parallèle sans prendre le risque de se retrouver avec un résultat qui ne correspond pas du tout à ce qu'on est en droit d'attendre.
 
Côté optimisation, je dirais que la différence de vitesse entre un foreach et un array_map doit être du même niveau que " ' Vs " " (à vérifier pour chaque versions de php) avec un petit avantage pour le foreach qui à un appel de fonction en moins par case du tableau.
 
A noter aussi que array_map peut travailler sur plusieurs tableaux à la fois ce que ne permet pas foreach, il y a donc des cas où la question ne se pose même pas.

n°1782186
masklinn
í dag viðrar vel til loftárása
Posté le 03-09-2008 à 17:04:11  profilanswer
 

skeye a écrit :

Le mieux est de tester, mais ça m'étonnerait fortement qu'il y ait une différence significative.


Bien au contraire, array_map génère un appel de fonction pour chaque item, et je doute très fort que les appels de fonctions soient très rapides dans PHP :D

 

Donc array_map est probablement largement plus lent que foreach :o

rufo a écrit :

l'idée c'était qu'avec array_map(), ça aurait été bien que ça crée des thread pour chaque appel à la fonction callback :) Sur un dual core, ça aurait pu faire gagner en perf...


Sauf que PHP n'est pas un langage "pur" (et qu'il n'est pas possible d'annoter des fonctions pour spécifier leur pureté), donc le callback peut trivialement avoir des effets de bord, demandant à ce que l'exécution soit séquentielle. Elle peut aussi utiliser des données issues de son contexte (globale) que PHP ne pourra pas indiquer à array_map, interdisant là encore la parallélisation automatique. (edit: grillé par omega2 là dessus)

 

Enfin, ça serait de toute façon complètement con, un thread OS c'est un objet relativement lourd, créer un thread pour chaque item de l'itération prendrait un temps fou


Message édité par masklinn le 03-09-2008 à 17:04:51

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1782205
rufo
Pas me confondre avec Lycos!
Posté le 03-09-2008 à 17:19:05  profilanswer
 

ok, merci pour toutes vos réponses :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1783843
Le_nain
Posté le 08-09-2008 à 12:23:22  profilanswer
 

Dans ton foreach, tu peux aussi améliorer les performances en utilisant une référence sur la valeur plutôt que la valeur directement.
 
$a = range(1,500);
foreach($a as &$b)
{
 $b = 2*$b;
}
 
Sera bien plus rapide que :
 
$a = range(1,500);
foreach($a as $k=>$b)
{
 $a[$k] = 2*$b;
}


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Différences de perfs entre foreach et array_map

 

Sujets relatifs
Variable dans array()[PHP/SQL] Mettre à jour des données dans un tableau array
Probleme avec un arrayAjouter des donnée dans un array deja rempli
Array Proleme[VBA] Petite Question sur les Array's
[RESOLU] PHP+Array + boucle while[resolu]différences entre deux fichiers
Maple, méthode RSA, type arrayTaille d'une Array en JavaScript
Plus de sujets relatifs à : Différences de perfs entre foreach et array_map


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR