Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

280
Vistas
¿Causa una fuga de memoria para que un WebWorker publique mensajes en tareas intensivas de CPU?

Digamos que tengo un archivo de WebWorker llamado ticker.js que consiste en esto:

 function tick() { postMessage(1); } setInterval(tick, 1);

Y luego, en el programa principal de JavaScript, tenía esto:

 let ready = true; let prevTime = 0; function sometimesLongTask() { ready = false; if (performance.now() - prevTime > 30) { // a very long CPU intensive task, like a loop which takes a while to complete prevTime = performance.now(); } ready = true; } const intervalWorker = new Worker('ticker.js'); intervalWorker.onmessage = function() { ready && sometimesLongTask(); };

¿Causaría esto una pérdida de memoria?

Creo que no, pero no estoy seguro. Mi lógica es que, si bien a sometimesLongTask LongTask a veces toma un tiempo (cuando han pasado 30 milisegundos), el 99% del tiempo se ejecutará de inmediato. Como tal, a pesar de que se agrega una nueva tick a la cola de eventos de Javascript cada milisegundo, de vez en cuando Javascript puede acelerarlos y eliminarlos, ya que la mayoría de ellos no necesitarán ejecutarse. ¿Es este realmente el caso?

Además, ¿necesito el indicador de listo aquí, o no hace nada (y puedo deshacerme de él)? Creo que podría no estar haciendo nada porque Javascript tiene un solo subproceso, por lo que, aunque WebWorker puede publicar varios mensajes muy rápidamente, Javascript no puede ejecutar varias instancias de sometimesLongTask al mismo tiempo. ¿Correcto?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Sí, esto no provocará una fuga de memoria , ya que eso, por definición, significa que las asignaciones de memoria no se liberan a pesar de que ya no se necesitan . Sin embargo, los eventos en la cola de mensajes aún son necesarios, eventualmente serán recibidos por el trabajador.

Pero ni siquiera obtendrá un uso creciente de la memoria. Sin embargo, esto se debe únicamente a la comparación de prevTime : podemos suponer que todos los eventos en cola se pueden manejar (sin hacer nada) en los 30 ms entre las ejecuciones de la tarea larga.

¿Necesito la bandera de ready aquí, o no hace nada?

De hecho, no hace nada útil. Tenga en cuenta que siempre es true cuando se ejecuta el controlador onmessage . El controlador onmessage nunca interrumpirá su sometimesLongTask síncrono durante el cual se establece en false .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda