Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

279
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda