<commit_before># Node.js - Aula 01 - Exercício
**user:** [vitorcapretz](https://github.com/vitorcapretz)

**autor:** <NAME>
**date:** 1465753167158

## 1. Explique como um processo síncrono e assíncrono roda no Node.js, dê um exemplo para cada.

No processo síncrono, há uma espera para que o processo seja finalizado antes que outros processamentos se iniciem.

```js
// Exemplo Síncrono
fs.writeFileSync('teste.txt', 'Teste de síncrono');
console.log('Função síncrona já foi executada e finalizada antes desse disparo');

```

No processo assíncrono não há uma espera para que o processo seja finalizado, o código é responsável por enviar uma requisição, por exemplo, e ficar aguardando um sinal de que o processo foi concluído. Durante este tempo de espera outros processos são executados em paralelo.

```js
// Exemplo assíncrono (Mongoose) 
Model.findOne(query, function (err, retorno){
  console.log('Função executada e callback (retorno) disparado.');
});

```

## 2. Como o V8 executa JavaScript? Demonstre 1 exemplo com código ou imagem.

O V8 funciona quase que como uma máquina virtual. Ele compila o código JavaScript em linguagem de máquina para ser executado de forma mais eficiente/rápida.

![exemplo_v8](https://qph.is.quoracdn.net/main-qimg-ab2a954b51c404efe66cdc7681da6b85)

## 3. Qual a diferença entre um sistema single para um multi-thread?

O sistema single-thread trabalha com uma tarefa por vez, as tarefas posteriores deverão esperar o término das anteriores para que sejam executadas.

Quanto ao sistema multi-thread, ele funciona dividindo as tarefas no processamento, de forma a executar mais delas simultaneamente.

Exemplo: 

* Single Thread (todas as tarefas no mesmo processador)
    Tarefa 1
    Tarefa 2
    Tarefa 3
    Tarefa 4
    Tarefa 5
    Tarefa 6

* Multi Thread (tarefas divididas no processador)
    Tarefa 1
    Tarefa 2
    
    Tarefa 3
    Tarefa 4
    
    Tarefa 5
    Tarefa 6
    
## 4. Como a Thread Pool tem um tamanho padrão de 4, o que acontece se você enviar 5 requisições ao banco?

No caso da requisição 5 e possíveis requisições subsequentes, estas ficariam na fila de Tasks (`Task Queue`) até que uma das outras tarefas em execução seja finalizada, liberando outro espaço na Thread Pool.
<commit_msg>Vitor Capretz - NodeJS - Exercício 01 - Resolvido<commit_after># Node.js - Aula 01 - Exercício
**user:** [vitorcapretz](https://github.com/vitorcapretz)

**autor:** <NAME>
**date:** 1465753167158

## 1. Explique como um processo síncrono e assíncrono roda no Node.js, dê um exemplo para cada.

No processo síncrono, há uma espera para que o processo seja finalizado antes que outros processamentos se iniciem.

```js
// Exemplo Síncrono
fs.writeFileSync('teste.txt', 'Teste de síncrono');
console.log('Função síncrona já foi executada e finalizada antes desse disparo');

```

No processo assíncrono não há uma espera para que o processo seja finalizado, o código é responsável por enviar uma requisição, por exemplo, e ficar aguardando um sinal de que o processo foi concluído. Durante este tempo de espera outros processos são executados em paralelo.

```js
// Exemplo assíncrono (Mongoose) 
Model.findOne(query, function (err, retorno){
  console.log('Função executada e callback (retorno) disparado.');
});

```

## 2. Como o V8 executa JavaScript? Demonstre 1 exemplo com código ou imagem.

O V8 funciona quase que como uma máquina virtual. Ele compila o código JavaScript em linguagem de máquina para ser executado de forma mais eficiente/rápida.

![exemplo_v8](https://qph.is.quoracdn.net/main-qimg-ab2a954b51c404efe66cdc7681da6b85)

## 3. Qual a diferença entre um sistema single para um multi-thread?

O sistema single-thread trabalha com uma tarefa por vez, as tarefas posteriores deverão esperar o término das anteriores para que sejam executadas.

Quanto ao sistema multi-thread, ele funciona dividindo as tarefas no processamento, de forma a executar mais delas simultaneamente.

Exemplo: 

* Single Thread (todas as tarefas no mesmo processador)
```
Tarefa 1
Tarefa 2
Tarefa 3
Tarefa 4
Tarefa 5
Tarefa 6
```

* Multi Thread (tarefas divididas no processador)
``` 
Tarefa 1
Tarefa 2

Tarefa 3
Tarefa 4
  
Tarefa 5
Tarefa 6
```    
## 4. Como a Thread Pool tem um tamanho padrão de 4, o que acontece se você enviar 5 requisições ao banco?

No caso da requisição 5 e possíveis requisições subsequentes, estas ficariam na fila de Tasks (`Task Queue`) até que uma das outras tarefas em execução seja finalizada, liberando outro espaço na Thread Pool.

{'fraction_non_alphanumeric': 0.07054400707651481, 'fraction_numerical': 0.025210084033613446, 'mean_word_length': 4.296252927400468, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '10941', 'n_tokens_mistral': 1685, 'n_tokens_neox': 1583, 'n_words': 613}