Como o próprio ChatGPT resumiu aqui
ChatGPT não é uma boa fonte porque ele se baseia em mistura de textos, por exemplo:
Em JavaScript, "assíncrono" refere-se a operações que são executadas de forma não bloqueante, permitindo que o código continue a ser executado enquanto se espera que uma operação termine.
Javascript realmente bloqueia a execução, é preciso descer o nível pra entender:
console.log("Inicio");
setInterval(() => {
console.log("Meio");
}, 500);
console.log("Fim");
O que a linguagem está fazendo?
imprime: Inicio
coloca: console.log("Meio"); na fila de espera para cada 500ms
imprime: Fim
Note que "coloca:" é uma ação rápida, ela bloqueia a execução mas por um tempo muito pequeno (de 1 a 4ms a depender da implementação) Quando chega em imprime Fim
ele faz uma busca na fila de espera, qual a próxima coisa a ser executada? Vai ter algo mais ou menos assim:
console.log("Meio");
setInterval(() => {
console.log("Meio");
}, 500);
Então ele vai interpretar assim:
imprime: Meio
coloca: console.log("Meio"); na fila de espera para cada 500ms
Basicamente o que acontece é que javascript coloca um loop no final da pilha que executa uma função e registra a execução de novo repetindo o processo, toda vez que console.log
é executado ele bloqueia, imprime e passa e toda vez que setInterval
é chamado ele bloqueia, registra e passa
O que causa esse efeito é que além de ser single-threaded
javascript geralmente é single-state
também, state
são ponteiros que recebem as pilhas de execução, não tem a ver com paralelismo multiplos states podem ou não estar em threads diferentes
Enfim, javascript parece assíncrono porque faz muito bem feito esse gerenciamento mas não é assíncrono, toda chamada "assíncrona", o que ele faz é uma técnica em sua VM chamada Out-of-Order Execution
mais especificamente a forma callback queue
O erro é pensar que setInterval
não é executado o que não é executado é o seu callback