En utilisant javascript j'ai remarqué cette chose. Vous pouvez utiliserEst-ce que ce comportement de setInterval implique un comportement de multithreading en Javascript?
var i=0;
var startingTime=new Date().getTime();
setInterval("foo()",1);
function foo() {
i+=1;
if ($("#foodiv").text()==i) {
//we detected a doubled value (parallel execution)
$("#repdiv").append("[repetition on "+i+"]");
}
$("#foodiv").html(i);
$("#timediv").html(Math.floor((new Date().getTime()-startingTime)/1000));
}
mais comme je l'ai lu et essayer moi-même le temps n'est pas 1ms, il est au moins 10ms ou quelque chose. En fait, après 10 secondes, j'ai une valeur de i autour de 2300/2400, et pas 10000 comme prévu.
Ceci est le facteur de temps minimum possible pour la procédure ??? certainement pas. Si j'essaie ceci:
<html><head>
<script language="javascript" type="text/javascript" src="jquery-1.4.min.js"></script>
<script type="text/javascript">
var i=0;
var startingTime=new Date().getTime();
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
function foo() {
i+=1;
if ($("#foodiv").text()==i) {
//we detected a doubled value (parallel execution)
$("#repdiv").append("[repetition on "+i+"]");
}
$("#foodiv").html(i);
$("#timediv").html(Math.floor((new Date().getTime()-startingTime)/1000));
}
</script>
</head>
<body>
<div id="foodiv"></div> (counter)
<br/>
<div id="timediv"></div> (seconds passed)
<br/>
<div id="repdiv"></div>
<br/>
</body>
</html>
Le compteur va très vite, et au bout de 10 secondes, j'ai une valeur de 12000 !!!!. C'est pour moi inexplicable, parce que l'appel n'est pas exécuté en parallèle (ou du moins nous pourrions avoir des valeurs lues doublées de i pour différents appels, en figurant dans la division repdiv).
Quelqu'un peut-il m'expliquer cela? Je sais que le processeur est très stressé par tous ces appels, mais au moins, il accélère les choses de manière surprenante.
J'ai lu toutes vos réponses et les autres quêtes du forum, et elles m'ont confirmé. Mais la vraie question est pourquoi! Pourquoi ils fixent la limite à 15ms quand je peux faire plusieurs appels séquentiels obtenant un temps beaucoup plus bas? Je suis sûr que ce système de rappel multiple n'est pas une bonne pratique, mais je peux le faire, et je peux potentiellement saturer la charge du processeur.
Je ne vois pas comment ce code fonctionne, set interval prend une fonction comme premier argument, pas foo(), cela devrait ressembler plus à setInterval (foo, 1). Il vous manque également une terminaison) après votre if et append –
Aussi, en supposant que le code est correct, les valeurs semblent fausses. Avec 12 minuteries, le compteur ne sera que 12 fois plus rapide, donc 600 deviendra 7200, pas 150000. Quelque chose me dit que ce n'est pas le code que l'OP a testé. – casablanca
vous avez raison, j'ai édité le code plusieurs fois, et l'ai recréé à la maison, mais le concept ne change pas. Je vais répéter les choses comme je l'ai fait efficacement. Aussi, si vous remarquez que j'ai omis le code html, et que cela rend les choses plus mauvaises si vous essayez cela comme il est. – mizar