recurso = busca_recurso(argumento);
// A linha abaixo só vai executar quando a função busca_recurso retornar
utiliza_recurso(recurso);
Uma alternativa a este modelo é a utilização de threads. Um conjunto de threads pode ser executado em paralelo possibilitando que uma tarefa seja executada por uma thread sem a necessidade de que uma thread chamada anteriormente termine. Porém, estas threads dividem os mesmo recursos, como memória por exemplo, fazendo com que seja necessário bastante cuidado para que uma thread não acesse indevidamente os recursos que estão sendo utilizados por outras threads, levando a comportamentos inesperados e indesejáveis. Alguns destes cuidados incluem o uso de locks e semáforos para sincronizar o acesso aos dados entre as diferentes threads.
O Node.js/JavaScript utiliza um paradigma diferente, conhecido como "Programação dirigida a eventos" através de manipuladores de eventos e callbacks. Um evento pode ser um clique em um botão, o pressionamento de uma tecla, etc.
Para isto, utilizasse um loop de eventos. O loop de eventos roda continuamente em uma thread única e fica "escutando" os eventos que ocorrem afim de chamar o callback registrado para este evento.
A tradução de callback seria algo como "chamar de volta". Ou seja, quando chamamos uma função assíncrona passando para ela um callback é como se o callback disse-se: "Continue com o processamento daqui pra diante e me chame de volta quando for necessário, ai então, eu farei o meu trabalho".
//Função de callback
var utiliza_recurso = function(recurso) {
//faz algo aqui
}
busca_recurso(argumento, utiliza_recurso)
// A execução continua mesmo que o callback utiliza_recurso ainda não tenha sido chamado
// em algum momento no futuro ele é chamado e faz seu trabalho sem bloquear o programa
O modelo de programação assíncrona utilizando um loop de eventos faz com que o Node.js possa trabalhar com várias requisições ao mesmo tempo, o que constitui uma das maiores vantagens em relação à outras tecnologias.
Espero que este post tenha sido útil.
Abraço.
Nenhum comentário:
Postar um comentário