Al usar javascript me di cuenta de esto. Puede utilizar¿Este comportamiento de setInterval implica comportamiento de subprocesamiento múltiple 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));
}
pero como he leído y trato a mí mismo no es el momento de 1 ms, que es al menos 10 ms o algo así. De hecho, después de 10 segundos, tengo un valor de i alrededor de 2300/2400, y no de 10000 como se esperaba.
¿Este es el factor de tiempo mínimo posible para el procedimiento? Ciertamente no. Si intento esto:
<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>
El contador va a ir muy rápido, y después de 10 segundos, que tienen un valor de 12.000 !!!!. Eso es para mí inexplicable, porque la llamada no se ejecuta en paralelo (o al menos podríamos tener algunos valores doblados de i para diferentes llamadas, figurando en el div repdiv).
¿Alguien me puede explicar eso? Sé que la CPU está muy estresada por todas esas llamadas, pero al menos acelera las cosas sorprendentemente.
He leído todas sus respuestas y las otras misiones en el foro, y confirmaron mi pensamiento. Pero la verdadera pregunta es ¿Por qué? ¿Por qué establecen el límite en 15 ms cuando puedo hacer múltiples llamadas secuenciales obteniendo un tiempo mucho más bajo? Estoy seguro de que este sistema de devolución de llamada múltiple no es una buena práctica, pero puedo hacerlo, y potencialmente puedo saturar la carga de la CPU.
No veo cómo funciona este código, set interval toma una función como primer argumento, no foo(), debería ser más como setInterval (foo, 1). También le falta algo de finalización) después de su if y anexar –
Además, suponiendo que el código es correcto, los valores parecen incorrectos. Con 12 temporizadores, el contador solo irá 12 veces más rápido, por lo que 600 se convertirán en 7200, no en 150000. Algo me dice que este no es el código que el OP ha probado. – casablanca
tienes razón, edité el código muchas veces y lo recreé en casa, pero el concepto no está cambiando. Voy a repetir las cosas como lo hice de manera efectiva. Además, si notas que omití el código html, y eso empeorará las cosas si pruebas esto tal como está. – mizar