﻿1
00:00:01,400 --> 00:00:03,624
‫Instrutor: Então, lembre-se que na última

2
00:00:03,624 --> 00:00:06,000
‫aula, falamos sobre a arquitetura do Node,

3
00:00:06,000 --> 00:00:07,670
‫onde duas partes fundamentais

4
00:00:07,670 --> 00:00:10,810
‫são o pool de threads e o loop de eventos.

5
00:00:10,810 --> 00:00:12,630
‫Portanto, nesta aula, você aprenderá tudo

6
00:00:12,630 --> 00:00:14,619
‫sobre threads e um pool de threads.

7
00:00:14,619 --> 00:00:15,771
‫E no

8
00:00:15,771 --> 00:00:19,510
‫próximo, vamos mergulhar fundo no loop de eventos.

9
00:00:19,510 --> 00:00:20,883
‫Então vamos começar.

10
00:00:22,230 --> 00:00:25,660
‫Portanto, em primeiro lugar, quando usamos o Node em um

11
00:00:25,660 --> 00:00:28,210
‫computador, significa que há um processo do

12
00:00:28,210 --> 00:00:30,110
‫Node em execução naquele computador.

13
00:00:30,110 --> 00:00:33,530
‫E o processo é apenas um programa em execução.

14
00:00:33,530 --> 00:00:35,900
‫E já aprendemos esse Nodo. js é

15
00:00:35,900 --> 00:00:38,490
‫basicamente um programa C ++, que,

16
00:00:38,490 --> 00:00:42,040
‫portanto, iniciará um processo quando estiver em execução.

17
00:00:42,040 --> 00:00:44,100
‫Isso é importante porque,

18
00:00:44,100 --> 00:00:46,980
‫no Node, temos acesso a uma variável

19
00:00:46,980 --> 00:00:49,670
‫de processo, que usaremos posteriormente neste curso.

20
00:00:49,670 --> 00:00:52,510
‫Agora nesse processo, Node. js é executado

21
00:00:52,510 --> 00:00:54,860
‫em uma chamada thread única.

22
00:00:54,860 --> 00:00:58,641
‫E um thread é basicamente apenas uma sequência de instruções.

23
00:00:58,641 --> 00:01:01,062
‫Mas não é importante entender profundamente

24
00:01:01,062 --> 00:01:03,690
‫o que é um segmento ou processo.

25
00:01:03,690 --> 00:01:05,740
‫Isso é mais sobre ciência da computação.

26
00:01:05,740 --> 00:01:08,130
‫Imagine uma thread como uma caixa

27
00:01:08,130 --> 00:01:11,483
‫onde nosso código é executado no processador de um computador.

28
00:01:12,750 --> 00:01:15,273
‫Agora, o que é importante entender aqui

29
00:01:15,273 --> 00:01:19,100
‫é o fato de que o Node é executado em apenas um

30
00:01:19,100 --> 00:01:22,346
‫thread, o que torna mais fácil bloquear aplicativos do Node.

31
00:01:22,346 --> 00:01:25,273
‫E isso é algo sobre o qual falamos antes, na verdade.

32
00:01:25,273 --> 00:01:28,650
‫Mas é algo muito, muito importante lembrar, porque esse

33
00:01:28,650 --> 00:01:30,586
‫é um dos recursos exclusivos

34
00:01:30,586 --> 00:01:33,029
‫do Node. js traz para a mesa.

35
00:01:33,029 --> 00:01:36,370
‫Portanto, novamente, se você executar seu aplicativo Node, ele será

36
00:01:36,370 --> 00:01:38,710
‫executado em apenas um único thread.

37
00:01:38,710 --> 00:01:41,834
‫Não importa se você tem 10 usuários ou

38
00:01:41,834 --> 00:01:45,030
‫10 milhões de usuários acessando seu aplicativo ao mesmo tempo.

39
00:01:45,030 --> 00:01:47,210
‫Portanto, você precisa ter muito

40
00:01:47,210 --> 00:01:49,610
‫cuidado para não bloquear esse thread.

41
00:01:49,610 --> 00:01:51,042
‫E nós, é claro,

42
00:01:51,042 --> 00:01:53,723
‫cuidaremos disso ao longo do projeto neste curso.

43
00:01:54,890 --> 00:01:57,010
‫Continuando, agora vamos entender rapidamente

44
00:01:57,010 --> 00:01:59,700
‫exatamente o que acontece em um único thread

45
00:01:59,700 --> 00:02:02,040
‫quando você inicia seu aplicativo Node.

46
00:02:02,040 --> 00:02:04,730
‫Portanto, quando o programa é inicializado, todo o código de

47
00:02:04,730 --> 00:02:07,440
‫nível superior é executado, o que significa todo o código

48
00:02:07,440 --> 00:02:09,060
‫que não está dentro de

49
00:02:09,060 --> 00:02:10,933
‫nenhuma função de retorno de chamada.

50
00:02:12,020 --> 00:02:16,200
‫Além disso, todos os módulos de que seu aplicativo precisa são necessários e

51
00:02:16,200 --> 00:02:18,560
‫todos os retornos de chamada são registrados,

52
00:02:18,560 --> 00:02:20,300
‫assim como os que

53
00:02:20,300 --> 00:02:23,390
‫usamos para nosso servidor HTP no aplicativo Node Farm.

54
00:02:23,390 --> 00:02:24,589
‫Lembre-se disso?

55
00:02:24,589 --> 00:02:29,589
‫Depois de tudo isso, o loop de eventos finalmente começa a funcionar.

56
00:02:29,890 --> 00:02:33,000
‫E novamente, mais sobre o evento em loop no próximo vídeo.

57
00:02:33,000 --> 00:02:35,500
‫O que você precisa saber agora é que o loop de

58
00:02:35,500 --> 00:02:38,410
‫eventos é onde a maior parte do trabalho é feito em seu aplicativo.

59
00:02:38,410 --> 00:02:42,600
‫Portanto, é realmente o coração de toda a arquitetura do Node.

60
00:02:42,600 --> 00:02:46,640
‫Mas aqui está o problema, algumas tarefas são realmente muito pesadas.

61
00:02:46,640 --> 00:02:50,570
‫Eles são muito caros para serem executados no loop de

62
00:02:50,570 --> 00:02:53,510
‫eventos porque, então, bloqueariam o único encadeamento.

63
00:02:53,510 --> 00:02:56,770
‫E é aí que entra o pool de threads, que,

64
00:02:56,770 --> 00:02:58,610
‫assim como o loop de eventos,

65
00:02:58,610 --> 00:03:01,670
‫é fornecido ao Node. js pela biblioteca

66
00:03:01,670 --> 00:03:03,890
‫libuv de que falamos antes.

67
00:03:03,890 --> 00:03:07,140
‫Portanto, o pool de threads nos fornece quatro

68
00:03:07,140 --> 00:03:10,560
‫threads adicionais que são completamente separados do thread único principal.

69
00:03:10,560 --> 00:03:14,170
‫E podemos realmente configurá-lo para até 128 threads.

70
00:03:14,170 --> 00:03:16,670
‫Mas normalmente, esses quatro são suficientes.

71
00:03:16,670 --> 00:03:19,630
‫Portanto, esses threads juntos formaram um pool de threads.

72
00:03:19,630 --> 00:03:21,840
‫E o loop de eventos pode

73
00:03:21,840 --> 00:03:25,490
‫então descarregar automaticamente tarefas pesadas para o pool de threads.

74
00:03:25,490 --> 00:03:28,490
‫E tudo isso acontece automaticamente nos bastidores.

75
00:03:28,490 --> 00:03:30,680
‫Não somos nós, desenvolvedores, que decidimos o que

76
00:03:30,680 --> 00:03:33,253
‫vai e o que não vai para o pool de threads.

77
00:03:34,780 --> 00:03:37,849
‫Agora, as tarefas caras que são descarregadas são

78
00:03:37,849 --> 00:03:41,390
‫todas as operações que lidam com arquivos, tudo relacionado

79
00:03:41,390 --> 00:03:44,898
‫à criptografia, como o cache de senhas, então todas

80
00:03:44,898 --> 00:03:48,860
‫as coisas de compressão e também pesquisas de DNS, que

81
00:03:48,860 --> 00:03:50,850
‫basicamente associa os domínios

82
00:03:50,850 --> 00:03:54,020
‫da web aos seus endereços IP reais correspondentes.

83
00:03:54,020 --> 00:03:55,500
‫Portanto, este é o

84
00:03:55,500 --> 00:03:57,870
‫material que bloquearia mais facilmente o thread principal.

85
00:03:57,870 --> 00:04:00,460
‫E assim, o Node se encarrega de

86
00:04:00,460 --> 00:04:02,890
‫descarregá-los automaticamente no pool de threads,

87
00:04:02,890 --> 00:04:05,830
‫onde eles não bloqueiam nosso loop de eventos.

88
00:04:05,830 --> 00:04:07,640
‫E essa é a coisa mais

89
00:04:07,640 --> 00:04:09,923
‫importante que quero que você retenha deste vídeo.

90
00:04:11,370 --> 00:04:15,693
‫Portanto, vamos agora prosseguir e falar sobre o loop de eventos em si.

