﻿1
00:00:01,400 --> 00:00:03,624
‫Istruttore: Allora, ricorda che nell'ultima

2
00:00:03,624 --> 00:00:06,000
‫lezione abbiamo parlato dell'architettura Node, dove

3
00:00:06,000 --> 00:00:07,670
‫due parti fondamentali

4
00:00:07,670 --> 00:00:10,810
‫sono il pool di thread e l'event loop.

5
00:00:10,810 --> 00:00:12,630
‫Quindi in questa lezione imparerai tutto

6
00:00:12,630 --> 00:00:14,619
‫sui thread e su un pool di thread.

7
00:00:14,619 --> 00:00:15,771
‫E nel

8
00:00:15,771 --> 00:00:19,510
‫prossimo, ci immergeremo in profondità nel ciclo degli eventi.

9
00:00:19,510 --> 00:00:20,883
‫Quindi iniziamo.

10
00:00:22,230 --> 00:00:25,660
‫Quindi, prima di tutto, quando usiamo Node su un computer,

11
00:00:25,660 --> 00:00:28,210
‫significa che c'è un processo Node in

12
00:00:28,210 --> 00:00:30,110
‫esecuzione su quel computer.

13
00:00:30,110 --> 00:00:33,530
‫E il processo è solo un programma in esecuzione.

14
00:00:33,530 --> 00:00:35,900
‫E abbiamo già appreso che Node. js è

15
00:00:35,900 --> 00:00:38,490
‫fondamentalmente un programma C++, che

16
00:00:38,490 --> 00:00:42,040
‫quindi avvierà un processo quando è in esecuzione.

17
00:00:42,040 --> 00:00:44,100
‫Questo è importante perché in

18
00:00:44,100 --> 00:00:46,980
‫Node abbiamo effettivamente accesso a una variabile di

19
00:00:46,980 --> 00:00:49,670
‫processo, che useremo più avanti in questo corso.

20
00:00:49,670 --> 00:00:52,510
‫Ora in quel processo, Node. js viene eseguito

21
00:00:52,510 --> 00:00:54,860
‫in un cosiddetto thread singolo.

22
00:00:54,860 --> 00:00:58,641
‫E un thread è fondamentalmente solo una sequenza di istruzioni.

23
00:00:58,641 --> 00:01:01,062
‫Ma non è importante capire a

24
00:01:01,062 --> 00:01:03,690
‫fondo cos'è un thread o un processo.

25
00:01:03,690 --> 00:01:05,740
‫Si tratta più di informatica.

26
00:01:05,740 --> 00:01:08,130
‫Immagina un thread come una scatola in

27
00:01:08,130 --> 00:01:11,483
‫cui il nostro codice viene eseguito nel processore di un computer.

28
00:01:12,750 --> 00:01:15,273
‫Ora, ciò che è importante capire

29
00:01:15,273 --> 00:01:19,100
‫qui è il fatto che Node viene eseguito in un solo

30
00:01:19,100 --> 00:01:22,346
‫thread, il che rende facile bloccare le applicazioni Node.

31
00:01:22,346 --> 00:01:25,273
‫E questo è qualcosa di cui abbiamo parlato prima, in realtà.

32
00:01:25,273 --> 00:01:28,650
‫Ma è qualcosa di davvero, davvero importante da ricordare perché

33
00:01:28,650 --> 00:01:30,586
‫questa è una delle caratteristiche

34
00:01:30,586 --> 00:01:33,029
‫uniche che Node. js porta in tavola.

35
00:01:33,029 --> 00:01:36,370
‫Quindi, ancora una volta, se esegui l'applicazione Node, verrà

36
00:01:36,370 --> 00:01:38,710
‫eseguita in un solo thread.

37
00:01:38,710 --> 00:01:41,834
‫Non importa se hai 10 utenti o 10

38
00:01:41,834 --> 00:01:45,030
‫milioni di utenti che accedono alla tua applicazione contemporaneamente.

39
00:01:45,030 --> 00:01:47,210
‫E quindi devi stare molto

40
00:01:47,210 --> 00:01:49,610
‫attento a non bloccare quel thread.

41
00:01:49,610 --> 00:01:51,042
‫E naturalmente ci occuperemo

42
00:01:51,042 --> 00:01:53,723
‫di questo durante tutto il progetto in questo corso.

43
00:01:54,890 --> 00:01:57,010
‫Andando avanti, capiamo ora

44
00:01:57,010 --> 00:01:59,700
‫esattamente cosa succede in un singolo thread

45
00:01:59,700 --> 00:02:02,040
‫quando avvii la tua applicazione Node.

46
00:02:02,040 --> 00:02:04,730
‫Quindi, quando il programma viene inizializzato, viene eseguito tutto

47
00:02:04,730 --> 00:02:07,440
‫il codice di livello superiore, il che significa tutto

48
00:02:07,440 --> 00:02:09,060
‫il codice che non è

49
00:02:09,060 --> 00:02:10,933
‫all'interno di alcuna funzione di callback.

50
00:02:12,020 --> 00:02:16,200
‫Inoltre, sono richiesti tutti i moduli di cui la tua app ha bisogno

51
00:02:16,200 --> 00:02:18,560
‫e tutti i callback sono registrati, proprio

52
00:02:18,560 --> 00:02:20,300
‫come quelli che abbiamo

53
00:02:20,300 --> 00:02:23,390
‫usato per il nostro server HTP nell'app Node Farm.

54
00:02:23,390 --> 00:02:24,589
‫Ricordati che?

55
00:02:24,589 --> 00:02:29,589
‫Quindi, dopo tutto ciò, il ciclo degli eventi inizia finalmente a funzionare.

56
00:02:29,890 --> 00:02:33,000
‫E ancora, maggiori informazioni sull'evento in loop nel prossimo video.

57
00:02:33,000 --> 00:02:35,500
‫Quello che devi sapere per ora è che il ciclo degli

58
00:02:35,500 --> 00:02:38,410
‫eventi è dove la maggior parte del lavoro viene svolto nella tua app.

59
00:02:38,410 --> 00:02:42,600
‫Quindi, è davvero il cuore dell'intera architettura Node.

60
00:02:42,600 --> 00:02:46,640
‫Ma ecco il trucco, alcuni compiti sono in realtà troppo pesanti.

61
00:02:46,640 --> 00:02:50,570
‫Sono troppo costosi per essere eseguiti nel ciclo degli eventi

62
00:02:50,570 --> 00:02:53,510
‫perché bloccherebbero quindi il singolo thread.

63
00:02:53,510 --> 00:02:56,770
‫Ed è qui che entra in gioco il pool di thread,

64
00:02:56,770 --> 00:02:58,610
‫che proprio come il ciclo degli eventi,

65
00:02:58,610 --> 00:03:01,670
‫viene fornito a Node. js dalla libreria

66
00:03:01,670 --> 00:03:03,890
‫libuv di cui abbiamo parlato prima.

67
00:03:03,890 --> 00:03:07,140
‫Quindi, il pool di thread ci fornisce

68
00:03:07,140 --> 00:03:10,560
‫quattro thread aggiuntivi completamente separati dal thread singolo principale.

69
00:03:10,560 --> 00:03:14,170
‫E possiamo effettivamente configurarlo fino a 128 thread.

70
00:03:14,170 --> 00:03:16,670
‫Ma di solito, questi quattro sono sufficienti.

71
00:03:16,670 --> 00:03:19,630
‫Quindi questi thread insieme hanno formato un pool di thread.

72
00:03:19,630 --> 00:03:21,840
‫E il ciclo degli eventi può

73
00:03:21,840 --> 00:03:25,490
‫quindi scaricare automaticamente le attività pesanti nel pool di thread.

74
00:03:25,490 --> 00:03:28,490
‫E tutto questo avviene automaticamente dietro le quinte.

75
00:03:28,490 --> 00:03:30,680
‫Non siamo noi sviluppatori a decidere

76
00:03:30,680 --> 00:03:33,253
‫cosa va nel pool di thread e cosa no.

77
00:03:34,780 --> 00:03:37,849
‫Ora, le attività costose che vengono scaricate sono

78
00:03:37,849 --> 00:03:41,390
‫tutte le operazioni che riguardano i file, tutto ciò

79
00:03:41,390 --> 00:03:44,898
‫che riguarda la crittografia, come la memorizzazione nella cache

80
00:03:44,898 --> 00:03:48,860
‫delle password, quindi tutta la compressione e anche le ricerche DNS,

81
00:03:48,860 --> 00:03:50,850
‫che sostanzialmente abbinano i

82
00:03:50,850 --> 00:03:54,020
‫domini Web ai loro corrispondenti indirizzi IP reali.

83
00:03:54,020 --> 00:03:55,500
‫Quindi questa è la

84
00:03:55,500 --> 00:03:57,870
‫roba che bloccherebbe più facilmente il thread principale.

85
00:03:57,870 --> 00:04:00,460
‫E così, Node si occupa di scaricarli

86
00:04:00,460 --> 00:04:02,890
‫automaticamente nel pool di thread,

87
00:04:02,890 --> 00:04:05,830
‫dove non bloccano il nostro ciclo di eventi.

88
00:04:05,830 --> 00:04:07,640
‫E questa è la cosa più

89
00:04:07,640 --> 00:04:09,923
‫importante che voglio che tu conservi da questo video.

90
00:04:11,370 --> 00:04:15,693
‫Quindi, ora andiamo avanti e parliamo del ciclo di eventi stesso.

