O princípio da execução js single-threaded de tarefas assíncronas

Olá a todos que estão aprendendo front-end~

Todo mundo sabe que JavaScript é uma das linguagens de script dos navegadores, e seu maior recurso é o single-threaded. Você já pensou que, como o JavaScript é single-threaded, mas também pode realizar operações assíncronas ao mesmo tempo, os dois são não completamente oposto? Hoje Xiao Zhang irá levá-lo para descobrir ~~

JS é single-threaded, esta frase é verdadeira. Mas, para ser mais preciso, JS possui apenas um thread principal, mas na verdade possui alguns outros threads.Claro, todas as tarefas de função só podem ser executadas no thread principal.

JS é a linguagem de script do navegador, portanto, deve ser de thread único no ponto de design. Quanto ao motivo pelo qual deve ser projetado como de thread único, amigos que não entendem podem ler meu blog anterior

Na verdade, como um script de navegador, a função mais fundamental do JS é realizar a interação entre o usuário e o navegador.Quando um usuário deseja excluir um A e adicionar conteúdo a A ao mesmo tempo, o que deve ser feito se for é multithread?para lidar? Não tem como lidar com isso. Se for uma thread única, é muito simples. O usuário realiza essa operação primeiro, e nossa thread principal executará qualquer uma delas, e não haverá conflitos.

Portanto, JS é obviamente de thread único, mas também pode executar operações assíncronas ao mesmo tempo. A seguir, conte-nos os pontos principais!

Em primeiro lugar, precisamos esclarecer um conceito, ou seja, a fila de tarefas . Um único thread só pode executar a próxima tarefa após a tarefa anterior ser concluída, então enfrentaremos um problema. Por exemplo, quando usamos Ajax para ler dados de rede, vai consumir muito tempo, mas tenho que esperar os resultados saírem antes de continuar. Portanto, os designers da linguagem JS perceberam que, neste momento, o thread principal pode ignorar completamente os dispositivos IO (dispositivos de entrada e saída, como Ajax, etc.), suspender as tarefas em espera e executar as tarefas que estão na fila primeiro . Aguarde até que o dispositivo IO retorne o resultado, depois volte e continue a execução da tarefa suspensa.

Portanto, as tarefas são divididas em dois tipos, uma é uma tarefa síncrona e a outra é uma tarefa assíncrona.

1. Tarefa síncrona: somente após a conclusão da execução da tarefa anterior, a próxima tarefa pode ser executada no thread principal

2. Tarefas assíncronas: todas as tarefas nesta fila não entram no thread principal para execução, mas são executadas pelo thread fornecido pelo navegador.Quando a execução for concluída, uma função de retorno de chamada será gerada e o thread principal será notificado. Após a execução da tarefa, ele chamará a função de retorno de chamada que se notificou o mais rápido possível, para que entre no thread principal para execução, como uma solicitação ajax, e o resultado da solicitação seja apresentado no thread principal.

sinergia entre síncrono e assíncrono

(1) Todas as tarefas de sincronização são executadas no thread principal, formando uma pilha de contexto de execução.
(2) Além do thread principal, há também uma “fila de tarefas”. Enquanto a tarefa assíncrona tiver um resultado em execução, um evento será colocado na fila de tarefas. (retorno de chamada da função de retorno de chamada).
(3) Depois que todas as tarefas síncronas na “pilha de execução” forem executadas, o sistema lerá a “fila de tarefas” para ver quais eventos estão nela. Essas tarefas assíncronas correspondentes encerram o estado de espera, entram na pilha de execução e iniciam a execução. (percorra esta etapa)

A chamada "função de retorno de chamada" (callback) é o código que será interrompido pelo thread principal. A tarefa assíncrona deve especificar uma função de retorno de chamada.Quando o thread principal começa a executar a tarefa assíncrona, a função de retorno de chamada correspondente é executada.

Acontece que é isso que costumamos dizer que single-threaded e assíncrono devem depender do navegador !

O texto acima é meu resumo de por que JS é single-thread e pode realizar operações assíncronas ao mesmo tempo.Se outros amigos tiverem alguma dúvida, deixe uma mensagem na área de comentários para discussão, obrigado~~

Acho que você gosta

Origin blog.csdn.net/Star_ZXT/article/details/129507891
Recomendado
Clasificación