
quante persone qui sanno in anticipo alcuni ok
Ho solo bloccato alcune diapositive che danno un
piccolo tutorial lo affronteremo
vero veloce ma prima quello che è Erlang
linguaggio funzionale orientato alla concorrenza
ha tipi forti di tipi dinamici
quindi non c’è controllo di tipo statico
controllando si incontrano problemi a
runtime è un linguaggio molto piccolo se
l’hai usato ne ha solo alcuni
elementi e parlare di quelli che presto è
una macchina virtuale che esegue un codice byte
chiamato beam e ha un built-in
sistema imperniato presenta l’Erlang
il linguaggio è venuto da Ericsson nel
metà degli anni ’80
un ragazzo di nome Joe Armstrong ha iniziato
ricerca su come costruire interruttori come
costruire linguaggi che si potrebbero utilizzare per
costruire interruttori più affidabili
e più economico e migliore
e Broadwick che brucia e Mike Williams
poi è arrivato per aiutarli dal
All’inizio degli anni ’90 Erlang era una lingua reale
cosa che quello che ho intenzione di parlare di oggi
quando la TV è arrivata nel 96 e poi
si scagliare in OTP erano aperte source
nel 1998 da allora è ancora
gestito da Ericsson con il team
là quello fa quello in loro aprono
contributi alla fonte che ho contribuito
un po ‘al virtuale di Erlang
macchina e linguaggio come altri a
bella piccola comunità pensa al
requisiti delle telecomunicazioni di cui hanno bisogno
un gran numero di attività concorrenti
perché non vuoi passare a solo
fai una telefonata alla volta che vuoi
essere tollerante del fallimento dell’hardware
e software e per farlo e tu no
solo bisogno di componenti che ti avrei aiutato con quella
che tu
distribuzione perché in definitiva in grado di
fallo e vuoi un sistema che possa
operare per anni con tempi di fermo minimi
le compagnie telefoniche potrebbero trovare la loro
gli interruttori scendono per più di tre o
quattro minuti all’anno ogni passato a
trovare abbastanza pesantemente così è con
cinque nove cinque nove all’anno quindi loro
voglio essere in grado di fare aggiornamenti in tempo reale e
manutenzione in modo da non dover prendere un
passa giù ora potresti pensare di no
lavoro in telecom che cosa mi interessa perché lo faccio
cura di questa roba e della ragione per te
la cura è se pensi a quello di oggi
applicazioni web cloud per applicazioni
applicazioni applicazioni di big data micro
applicazioni di servizio che tutti vogliono
stessa cosa tutti devono essere su tutti
il tempo in cui vogliono eseguire il failover in
caso di errore e sistemi distribuiti
problemi tutto questo, quindi questo è il motivo
Erlang, penso che tu sappia che mantiene ancora
popolarità e continua a far crescere le persone
stanno scoprendo che in realtà fa questo
Roba molto bene la stessa Erlang VM
può eseguire più lingue così è Erlang
una lingua sulla VM c’è elisir come
molte persone hanno provato lecca esso
sembra essere molto popolare
popolarità perché è tipo di aspetto
come Ruby hanno fatto un buon lavoro
quella lingua ci sono un paio di parole
lista aromatizzata Erlang e Java così quelli
sono una lista classica con tutti i macro e
tutto ciò che funziona sulla VM esiste a
linguaggio chiamato 15 che è una specie di
ispirato al Python Credo di aver
mai usato e c’è altro tipo di
piccolo di cui parliamo le lingue
processi così procedono in Erlang c’è a
l’intero modello per i processi è molto
molto importante di quello di cui parleremo
oggi
elaborare la VM supporta leggero
fili verdi quindi ricordo indietro uno dei
i primi discorsi che ho avuto
un vecchio MacBook e su quel MacBook
probabilmente 2008-2009 potrei iniziare milioni
attraverso questa notizia in mezzo secondo così
è solo migliorato entrambi
le applicazioni non utilizzano il mulino in
processi di pratica ne ho scritti alcuni
quello ha richiesto fino a 200.000 quindi è bello
avere quando ne hai bisogno ma la maggior parte no
usa molte ma tutte le applicazioni usano
più processi se lo sanno
o no il runtime stesso elabora
programmazione e quelle procedure di prelazione
in modo da far funzionare il processo per un po ‘
scambiarlo fuori e ottenere un altro in esecuzione
non c’è niente che devi fare nella vostra
codice per farlo accadere
c’è una funzionalità chiamata linking e
monitoraggio di due funzionalità che in realtà collegano
e per fare due processi insieme
il monitoraggio è quando un monitor di processo
è un altro di cui parliamo molto di più
che più tardi mmm è molto importante
caratteristica per la tolleranza ai guasti, quindi quando a
il processore viene eseguito solo in Erlang
funzione e quella funzione può naturalmente
chiamare altre funzioni, ma non appena che
funzione ed è il processo e nel
processo riscontra un’eccezione inaspettata
poi il processo muore o se qualcuno
uccide il processo il processo muore I
menzione preventiva prima del virtuale
la macchina eseguirà un processo per qualcosa
chiamato mm mm di qualcosa chiamato a
riduzione la riduzione è quasi come a
funzione che chiamiamo tipo di equivalente a a
chiamata di funzione e verrà eseguito su
2000 quelli preempted per un altro processo
se è a corto di quello e va
in un’attesa in attesa di un messaggio da
un altro processo e non ha messaggi
nella sua coda
lo scheduler o la VM verranno preventivati
se lo fa conosco la prelazione quindi c’è
un sacco di regole su come le cose
vieni reimpostato come programmatore
non devi davvero fare nulla per te
non devi chiamare rendimento che non hai
fare qualsiasi prelazione cooperativa
te stesso che la VM si prende cura di questo per
tu guardiamo come viene messo il sistema
insieme la maggior parte non conosco persone nel
indietro e vedere questo, ma c’è un po ‘di CPU
core qui o uno fino a core e
la maggior parte dei sistemi oggi è multi-core
hai in cima che il tuo funzionamento
thread di sistema e kernel su cui si basa la VM
Oltre a questo e per tutto da
predefinito per ogni core che ottieni
c’è un programmatore all’interno della VM
tutti questi thread dello scheduler
quelli sono i thread del kernel e ognuno di essi
il thread dello scheduler ha le code di esecuzione così
le code di esecuzione sono dove i processi
ottenere memorizzati i programmi di pianificazione andare lì correre
le code prenderanno un processo
eseguirlo come ho descritto prima di mettere
nella parte posteriore della coda ne prende un’altra
uno se nessuno di loro finisce il lavoro loro
può rubare dagli altri questi
gli scheduler meritano di essere studiati se tu
mai avere tempo perché non sono solo
piccole cose stupide che stanno tirando fuori questo
la coda è un bel po ‘ di mestiere che è
andato in queste cose sono altamente
tutti indipendenti sono in esecuzione
essenzialmente l’emulatore circonda la cosa
che esegue tutto il bytecode così ogni
lo scheduler sta eseguendo quel ciclo e come
risultato che tipo di tutti stanno facendo il
stessa cosa ma in tempi diversi per
mantenerli indipendenti riducono al minimo
bloccando tra loro cercano di non farlo
condividere qualsiasi cosa i casi in cui lo fanno
condividere le cose che ancora cercano di
evitare di bloccare a tutti i costi, quindi è così
in pratica sto solo cercando di condividere il meno possibile
il più possibile attraverso questi scheduler
c’è stato un sacco di lavoro che è andato via
in questi cinque anni fa Holika
fare un cubo condiviso da un gioielliere
test di scalabilità che il team ha trovato
lo hanno fatto in questo modo è semplicemente ridimensionato
meglio così le persone stanno migliorando sempre
gli scheduler quante persone hanno
sentito dire che si blocca per girli è gentile
di famosi per quello penso così Joe
Armstrong ha un dottorato in Erlang che potresti essere
l’ unica persona, ma se leggi quel dottorato
che è molto leggibile un sacco di dottori di ricerca sono
tipo di secco o qualsiasi altra cosa, ma questo è
abbastanza leggibili queste sono alcune citazioni
da lì lascia che sia l’ altro
processo fai il recupero della freccia lascialo
crash non programma in modo difensivo e
quando ci pensi , sono sicuro che ce l’abbiamo
tutto visto codice o fare come un try-catch in
la presa ti dirà solo una correzione del commento
me o commento non so cosa fare
qui o sai solo che non sai nemmeno
fare qualcosa in anticipo non è che tu
non trattare con c’è che sei tu
devi sempre fare se ci sei solo
trattare con loro in modo diverso parleremo
più su questo quando vado attraverso così perché
hai tutta questa concorrenza è giusta
essere cool o sì, non è perché è
di affidabilità quindi ricorda il tutto
cosa pensi della nostra lingua?
costruire interruttori affidabili e che cosa
la concorrenza ti dà un po ‘di isolamento
sai in tutti i mari che sono tutti
in esecuzione nella stessa macchina virtuale ma
non condividono la memoria o il fatto che
sono nello stesso processo che contattano
a vicenda attraverso il messaggio più velocemente
non mi piace mai raggiungere lo stesso
memoria per il recupero
Ho menzionato link e monitor in precedenza
ciò che consente è un processo da guardare
un altro processo e questo sono stato
facendo tutto il lavoro e questo è giusto
tipo di andare in giro a dire perché
ancora c’è, va bene, dovrebbero
muore perché colpisce qualcosa di inaspettato
eccezione questa può agire e
di solito ciò significa che sta riavviando
il processo e poi di nuovo per avere un
sistema fault-tolerant
tutti i computer, quindi tutto questo funziona
più computer se si desidera inviare un
messaggio a un processo in realtà non
importa se è nella tua VM o in un’altra
VM sullo stesso nodo o su un’altra VM
il network
sai sotto gli effetti di rete
gestione della latenza e fallimento parziale
fondamentalmente il modello di processo è lo stesso
tutto qui è una rapida panoramica di Erlang
ci sono solo pochi elementi nella lingua
Non ho intenzione di leggere, ma questo è
tipo della maggior parte degli atomi si vede a
sono solo nomi o solo valori
con i nomi non si sa quale sia il valore
è come Enuma e c ++ per esempio
ha un valore ma dovresti usarlo
è che solo un nome simile qui quelli
sono le variabili in lettere minuscole
le variabili in maiuscolo non sono variabili
sono funzioni immutabili di Danny
i nomi dei moduli sono variabili Adams in diretta
all’interno delle funzioni non ci sono Global
le funzioni vivono all’interno dei moduli che vedremo
alcuni esempi di tali funzioni sono
identificato dal loro nome e dalla loro era T
quanti argomenti hanno e poi?
puoi anche avere funzioni anonime
le funzioni possono essere esportate da un modulo
per renderli visibili ad altri moduli
e chiamabile da altri moduli o lì
possono essere internals che sono chiamati
solo all’interno di quel modulo e poi
le funzioni possono anche essere passate come
gli argomenti restituiscono quei valori farciti
in altre strutture di dati di ordine superiore
funziona fondamentalmente perché il loro Lang
è un compito linguistico funzionale
pattern matching quindi se ne hai uno
la variabile che non ha binding ha no
valore e dico barnacles variabile a
allora il potere ora è legato a – se dico
bar è uguale a di nuovo è un po ‘come un
assertion yes bar is – I match to a bar
ed è vero se dico bar uguale a 3 questo
provoca un’eccezione chiamata corrispondenza errata
perché il bar ha circa come
– e – ovviamente non sono tre così
ci vuole un po ‘per abituarsi ma lo siamo
abituarsi molto velocemente
c’è anche il pattern matching in
funziona così se ho una funzione foo
questo dice che foo prende una lista vuota
e se ottiene una lista vuota come un
argomento che la lista che conosci è abbinata
e avrei eseguito qualsiasi cosa fosse vuota
elenca la versione di foo è per qualsiasi altra cosa
Ottengo una variabile denominata lista vincolata
al valore passato presumibilmente di
elenco non vuoto ma ancora a causa di
tipizzazione dinamica potrebbe essere qualsiasi cosa, ma
il runtime selezionerà questa versione di
chi l’ha detto per qualcosa di diverso
c’è un’espressione di caso che hai usato
un po ‘è un modo di abbinare in modo
hai un valore o il ritorno di a
funzione o qualcosa si può dire caso
bla bla bla e abbina tutti i valori
quello potrebbe tornare là è di default
corrispondenze e pattern matching in
teste funzione abbiamo tipo di sega su un
slide precedente ma ecco un esempio di
cibo prendendo due argomenti dove loro
deve essere lo stesso valore così questo
impone che qui è un idioma molto comune
dove dici che bar prende una lista deve essere
non vuoto deve avere almeno uno
elemento che l’elemento sta per essere
chiamato H e il resto della lista è T
quindi vedi molte funzioni ricorsive
quello prenderà una lista come quella che sarà
togli la testa dalla lista fai un po ‘
azione e passare T a se stesso come il resto
della lista e quindi in genere finiscono
la funzione per quello sta prendendo voi sapete
abbinare la lista vuota e terminare il
ricorsione in modo da vedere questo un po ‘come
bene il messaggio che passa così se ne hai uno
ID processo questo è un ID processo variabile
in possesso di un ID processo è possibile utilizzare il
punto esclamativo da inviare
un tale messaggio può essere il tuo termine di vita
potrebbe essere un atom strangle è numerato o
qualunque cosa
un altro ID di processo che puoi registrare
processi sia a livello locale che globale
ci sono alcuni registri che vengono con
Erlang va TP e poi altri lo sono stati
costruito per vari motivi di diverso
tipi di qualità di distribuzione così
ora sai dove entrano
OTP così ITP aumenta Erlang è come un
strato costruito su Burlington e OTP
sta per piattaforma di telecomunicazioni aperta noi
di solito non usi più quel nome
perché non è specifico per le telecomunicazioni, quindi noi
chiamalo OTP OTP aggiunge altro
librerie un sacco di strumenti e a
mazzo di principi che sono davvero come
usi il sistema nessuno usa Erlang di
di per sé è sempre lì come TP
quindi sono un po ‘ ora tutto ciò che sono
dicendo ma hanno ancora un tipo di
nomi distinti i principi di progettazione noi
può camminare attraverso quelli c’è comportamenti
Parlerò un po ‘ di questo
questi sono solo piccoli quadri
quadri di frasi classiche che sono
soluzioni parziali ai problemi comuni
tipicamente quello che fai è estendere il
comportamento con il proprio codice per rendere il
soluzione completa proprio come il framework
c’è qualcosa chiamato la supervisione
albero che è una gerarchia di processi I.
accennato in precedenza come si può avere un
processo facendo qualcosa in un altro
osservandolo bene questo processo è il
lavoratore e colui che lo guarda come un
supervisore di eventuali supervisori responsabili
qui Oh tipo di qui qui a fare
questo ma probabilmente sei nel tuo
modalità di supervisione ti stai solo seduto
intorno e guarda tutti proprio così
è una specie di
che le applicazioni stanno davvero prendendo
questi alberi di supervisione e gli operai
e tutto ciò che li impacchetta
risorse utilizzate dal sistema come Jason
fiale o sai qualunque cosa e alcuni
dati di configurazione e tipo di messa
che tutti insieme e questo è un
applicazione
allora hai delle versioni che sono
collezioni di applicazioni confezionate
insieme come uno schierabile possedere è un
in esecuzione rilascio in pratica si prende il
rilascio metterlo su una nota farlo funzionare
e questo è distribuito la gestione del rilascio è
quando hai un rilascio in corso e tu
può aggiornarlo o eseguirne il downgrade
l’ appartamento operativo dal vivo e poi
i cluster sono solo nodi interconnessi
quindi hai questo tipo di intera gerarchia
di voi sapete partendo da tutti i processi
la via fino a un sistema distribuito e
quelli a lungo
ci sono solo principi di design che raccontano
come fare tutto ciò che fornisce OTP
ciò che TP offre anche altre cose come
un sacco di strumenti per le operazioni
monitoraggio della gestione come impacchettare
rilasci e se quelli preparati per
strumenti di implementazione per fare il debugging
copertura di test facendo fare test
misurazione delle prestazioni è solo un
un sacco di cose e riflette il
il fatto che il sistema sia in giro per a
molto tempo e queste sono cose che
le persone usano in produzione e tu sai
la cosa bella è che si sono evoluti
nel tempo quindi ci sono alcuni pacchetti che
sai utilizzato per essere utilizzati che non sono
utilizzati come più molto e alla fine
tipo di trovare la loro via d’uscita da OTP mentre
le cose più nuove arrivano così i tuoi modi di
osservando un sistema in esecuzione e guardando
relazioni tra processi e
tracciando i comportamenti e tutto il genere di
roba così l’intero sistema si evolve
costantemente c’è una nuova versione di aria
rivestimento in genere ogni 12 a 13 mesi
così il prossimo mese uscirà Erlang 19
sistema in continua evoluzione ora parliamo
riguardo i comportamenti c’è un sacco di
comportamenti standard gens server è il
il più usato è un client-server
modello passo attraverso un grande esempio con
Gen server c’è gen FSM che è
macchine a stati finiti e una novità assoluta
comportamento macchina di stato chiamato stato gens
e questo non è ancora abbastanza disponibile
sarà disponibile quando questo nuovo
l’uscita esce l’evento gen del mese prossimo
è un framework di gestione degli eventi e quindi
c’è il supervisore che ho menzionato prima
applicazione che ho menzionato prima così
qual è lo scopo di un comportamento il
scopo primario è quello di separare il
parti generiche di una soluzione da quelle
dalle parti specifiche del dominio, quindi tu
avere un sacco di caratteristiche che
è necessario per il tipo di tutti i server client
per esempio gen server contiene tutto questo
Ti mostrerò più tardi come fai
Server di Jenna e estenderlo con il proprio
codice per risolvere il tuo problema c’è a
sacco di casi d’ angolo rappresentati nel
codice così le cose hanno imparato nel corso degli anni
potresti pensare che probabilmente hai sentito
sai
non devi gestire il blocco e
non è come il solito multi-threaded
programmando non ti occupi di gara
condizioni e tutto questo e quello è
in parte vero, hai sempre a che fare con la razza
condizioni è solo che qui un sacco di
è stato risolto perché queste cose
sono stati in giro così a lungo e in
produzione così lunga che questi angoli
i casi si sono presentati e sono stati
collegato in modo sì sì è proprio come un
raccolta di moduli riutilizzabili che sono
utile per un numero di domini per
risolvendo problemi comuni c’è anche
tutta questa storia di OTP e se tu
seguire tutte le regole di OTP segui il
principi di progettazione e tutto ciò che ottieni
molto indietro e ritorno così cose simili
essere in grado di avviare la tua applicazione
essere in grado di inserire la tua applicazione
una raccolta di altre applicazioni che
potrebbe anche non averti conosciuto
potrebbe essere che qualcuno ha scritto un
applicazione a qualcun altro ha scritto B e
qualcuno tipo a valle di afferrare entrambi
li poi li mette insieme in un modo
che nessuno ha previsto se segui il
regole che funzioneranno bene se tu
non accadranno cose cattive
per fortuna tutti gli strumenti nerd li hanno
tipo di rendere facile seguire le regole
ma cose come l’avvio e l’arresto
la tua applicazione non sembra difficile
a meno che tu non abbia dipendenze da altro
applicazioni come si forza l’ordine
beh, TP lo fa per te che osservi
e il monitoraggio è in grado di eseguire il debug
le cose devono sempre tornare indietro e dire oh
Ho dimenticato di mettere tutte le mie stampe nel
codice come ho intenzione di fare, ma questo
imballaggio e rilascio dicendo di fare live
aggiornamenti è tutto il tipo di prescritto per
così eseguiamo un esempio è
tipo di non un esempio molto interessante
perché volevo mantenere le cose semplici in modo
c’è un server p-value che elabora una chiave
il processo del value server è solo un processo
è in esecuzione che ti consente di memorizzare le chiavi
insieme ai valori
e dopo puoi andare a chiedere se lo è
ha una certa chiave e se non la dà
tu il valore e se così non sarà
ti dico che non ho quel valore che sarà
ti permettono di cancellare chiavi e valori di
Certo e poi sai che vuoi
più client per essere in grado di usarlo
cosa così potresti immaginare di avere
qualcosa come un denaro lo sai
solo memorizzare nella cache i valori di più client
usandolo la ragione per cui dico che non è molto
un buon esempio è naturalmente che arriva Erlang
con negozi di valore chiave di tre o quattro
comunque , ma ancora una volta questo lo rende semplice
e tutti possono capirlo e io
non devi mettere un sacco di codice sul
scivola quindi quali sono i problemi che siamo
cercherò di definire la nostra chiave
value server che sarà uno dei
mantenere lo stato del server certamente no
voglio dire chiave di archivio e valore e
Dice che l’ho fatto e poi tu dici okay dammi
quello di cui non so stai parlando
su così tu vuoi essere in grado di mantenere il
stato del server devi essere in grado
per iniziare, basta che i clienti lo siano
in grado di individuare il server e parlarci
e il server deve gestire il client
le richieste danno un senso alle richieste
entrare se c’è qualche errore deve
trattare con quelli, ma deve anche essere
in grado di rispondere ai clienti e dare
indietro quello che hanno chiesto
così stato del processo è di tipo interessante
Le variabili di Erlang sono immutabili e lì
non ci sono variabili globali quindi come stai
avere un processo del server che può memorizzare
affermare in un modo sarebbe solo scrivere
tutto tranne il disco ma questo è un
server in memoria , quindi non è così
andando a lavorare potremmo imbrogliare e usare il genere
dei punteggi interni di Erlang
e lo facciamo nei nostri esempi
ma questo non è il vero punto che sto cercando
per arrivare ad ogni processo del server in OTP
ha questa cosa che ha ricevuto tutto
valutando così quello che succede c’è come me
detti processi precedenti eseguono funzioni
dire una funzione che presumibilmente è una chiave
funzione value server è un loop
e il Louvre ha solo uno stato e
riceve un messaggio e dice cosa devo fare
con questo messaggio se è come un negozio
messaggio in cui verrà inserito un valore chiave
il suo stato e crea un nuovo stato, se lo è
una cancellazione eliminerà la chiave e
il valore e creare un nuovo stato
qualunque cosa faccia , potrebbe crearne una nuova
affermare che potrebbe essere solo una ricerca
l’educazione sarebbe lo stesso stato ma a
Alla fine della funzione hai il
stato essere un nuovo o vecchio e basta chiamare
te stesso con quello stato quindi lo stato di
la funzione è appena stata conservata come un
argomento in modo che assomigli a questo
abbiamo solo il nostro stato in arrivo che abbiamo
un ricevere qui che gestisce i messaggi
questi sono solo commenti , non è così
in realtà facendo qualsiasi cosa e presumibilmente
questa dichiarazione di ricezione restituisce uno stato
potrebbe essere nuovo potrebbe essere vecchio che ottiene un
nuovo stato e poi chiamiamo di nuovo il ciclo
con il nuovo stato è piuttosto semplice ma io
ricorda quando stavo imparando Erlang I
tipo di chiedersi come tutti questi comportamenti
sai come fanno queste cose sotto
le copertine e vai a guardare il codice il
il codice ha molto, c’è molto codice
lì perché sta gestendo molto
casi d’angolo, ma fondamentalmente solo
funziona in questo modo per i diagrammi in pratica
che il nostro server si avvia e chiama
inizializzare ha qualche inizializzazione ma
poi va nel suo ciclo e si siede appena
lì forse sta cambiando il suo stato
alla fine qualcuno lo dice e basta
esce e forse non ripulisce
okay, questo è il problema risolto
su come iniziare a fermare bene il server
è abbastanza facile perché in Erlang
processo può generare un altro processo
c’è una funzione integrata per questo per
fermandoti, semplicemente lo invierai a
Messaggio
invia letteralmente l’ atom stop e quello
la cosa può ricevere azioni e andare avanti
Dovrei smettere di smettere e uscire così in
termini di avvio di un server KB che potremmo
basta avere un modulo kv in cui esporteremo
funzione per iniziare con fermare questi zeri
significa solo che non accettano argomenti
l’inizio sta appena generando una funzione nel
il modulo kv si chiama Lugh e ne passiamo uno
argomento questa cosa dall’aspetto divertente qui
è una mappa vuota o semplicemente usando una mappa
internamente per memorizzare le nostre chiavi e valori
torniamo all’ID del processo da spawn noi
quindi chiama registro e inserisci il nome K V
quindi voglio registrare questo processo dato
per ID di processo sotto il nome K bean che
consente ai clienti di andare e chiedere il
registro dove è KV e ottiene il
idea di processo che è quella in cui torniamo
questo Tuggle che va bene all’animale K
è molto comunemente usato in Erlang per
indicare il successo va bene e poi quello
processo ID così il chiamante di start ottiene
questa parte posteriore è doppiamente carina
l’arresto diretto è uguale
Semplicemente abbiamo solo una funzione
smettiamo di prendere il nome KV che è
registrati sotto questo processo abbiamo iniziato
e invia il messaggio stop e poi noi
solo tornare okay non ci interessa davvero
se c’è una risposta a questo o altro
altrimenti finirà per ricevere il messaggio
e fermati se è ancora vivo
un codice server per l’arresto è un po ‘di più
interessante ma non è quello
interessante è solo il nostro ciclo e il nostro
ricevere blocco e tutto ciò che stiamo dicendo è
ricevere e vedo un messaggio che è il
Adam smettila di tornare, okay, non farlo
qualsiasi altra cosa perché non stiamo chiamando
la funzione ricorsivamente il ciclo
la funzione termina e quando la funzione loop
Termina il processo se ne va guardiamo
l’API o il nostro server di nuovo abbiamo il nostro
dichiarazione del modulo chiamata kV abbiamo tutto
le nostre esportazioni si prega di fare tutti questi
funzioni visibili all’esterno del modulo kV
in modo che altri possano chiamare altri moduli
store prende una chiave e valore e it
lo memorizza Non mostro il codice attuale
basta commentare bene ci vuole una chiave
o restituisce una tupla che è la
chiave e il valore o restituisce un valore booleano
falso questo è un caso in cui il tipo di Erlang
di digitazione libera è un po ‘di aiuto in
altre lingue che dovresti usare
come un certo tipo o qualcosa da dire I
voglio restituire due cose diverse
qui stiamo solo dicendo che sta andando
essere una coppia o sarà falso
elimina solo invia la chiave e se lo è
lì lo elimina se non non lo fa
il codice client per la memorizzazione prende una chiave e
il valore
usa il nome kV il nome registrato di
il nostro processo e invia un messaggio
messaggio è questa coppia con quattro
elementi il negozio atomico che è quasi
come un’istruzione a questo punto
digitare il valore che è stato passato in e
sé come funzione costruita
in Erlang per ottenere il tuo processo
ID una volta inviato il messaggio al cliente
entra in una ricezione e dice solo che sono
in attesa di ricevere ok una volta ricevuto
okay, raggiungo il diario
e ho fatto e questo è ciò che mostrerò
tu perché inviamo il nostro processo in cui penso
la versione del server il server ha il suo
loop così qui abbiamo ricevuto che abbiamo
stop che abbiamo avuto sulla diapositiva precedente
o la cosa precedente che abbiamo implementato così
se ci fermiamo torniamo a posto la
punto e virgola significa un po ‘come o se noi
fallo fare questo o se otteniamo questo
doppio che è il valore della chiave del nostro negozio
ID di processo inseriamo la chiave nel valore
nella nostra mappa che ci dà una nuova mappa noi
invia il messaggio
ok, torna a questa idea di processo che era
passato a noi
questo fa sì che il cliente sappia ehi
va bene, ragazzo ha fatto il negozio e poi
con la nuova mappa che chiamiamo loop
ricorsivamente
ora che la ricorsione è ricorsiva alla coda
non è presente alcun proprietario di prodotti stack
per sempre e sempre e sempre più a lungo
il tuo computer rimane in esecuzione cerca e
I cancelli sono costruiti davvero allo stesso modo
solo con diverse tuple, quindi prendi
la richiesta pubblica forse per te bene
probabilmente usa l’atom find che passa il
chiave e sei denocciolato dal cliente
il server riceverà Tuggle
cercalo nella mappa restituisci il
valore appropriato o inviare Ansari inviare
il valore appropriato per il cliente
eliminare allo stesso modo ho intenzione di chiedere
una domanda visto che non mi stai chiedendo
qualsiasi parte di ciò che ti ho appena mostrato
sono generici e quali parti sono
specifico per un archivio di valori chiave
non saltare tutti in una volta, va bene così
sembra generico per una chiave Valley okay cosa
se non era un valore chiave ce ne sono
parti di ciò che potresti tenere bene
anche se intendo l’unica linea che sexy di
lo stato è l’unica cosa specifica della chiave
valore che il ciclo sembra uno schema
che tornare a posto sembra quasi come
il modello quindi è solo quello che grazie
ragazzi per il messaggio è e quello è
ciò che memorizza l’affermazione costruisce un nuovo
stato okay eccellente
così semplicemente ripetendo per il video e
stai dicendo che tutta questa storia
si sa solo la memorizzazione di un valore in una mappa
è specifico per kV ma l’intera idea di
looping e ricezione di valori e poi
inviare risposte al cliente è carina
sì generico
bene si le parti generiche stanno generando
un server che conosci che genera un server
sempre lo stesso che chiami una forma di
spawn gli dai un modulo e una funzione
e alcuni argomenti la gestione del
lo stato del loop è la stessa cosa, giusto è
solo lo stato è diverso ma il ciclo
è lo stesso come si invia un client
la richiesta è la stessa che è come a
funzione incorporata di Erlang e idem
per le risposte del server è tutto uguale
– e quindi l’arresto del server è il
lo stesso vale West fuori dal giro il
parti specifiche della soluzione hanno a che fare con
inizializzazione
perché il tuo stato sarà
diverso, quindi bisogna inizializzarlo
diversamente basato su qualunque cosa sia
stai scrivendo per la nostra soluzione per KD
abbiamo usato una mappa come una mappa vuota così
questo è lo stato delle richieste che sono
inviato dal cliente e le risposte
dal server sono specifici per
soluzione perché sai che c’è
diversi valori coinvolti in diversi
comanda se vuoi essere coinvolto e poi
qualsiasi pulizia se c’è qualcosa di te
devi fare al tuo stato alla fine di
pulire
se vuoi la storia della persistenza che hai
andare e svuotare qualcosa che disco o
qualcosa ma è anche specifico e
questo è davvero ciò che i comportamenti sono circa
i comportamenti prendono tutte le cose generiche e
mettilo in un modulo comportamentale quindi se vai
guarda nella tua compagnia aerea e vai
e guarda gen server c’è un gen
modulo server e fa esattamente questo
prende tutte le parti generiche
modello client-server , se lo si desidera
chiamiamoli pacchetti di questi e
questo è ciò che ti offre il server Genna
il comportamento si aspetta di essere inizializzato
con quello che viene chiamato un modulo di callback a
il modulo di callback è ciò che scrivi è
ha ottenuto tutte le parti che hanno risolto il
problema che stai cercando di risolvere e una volta
inizi quel comportamento se inizi
il tuo gen server mentre riceve le cose
il suo ciclo sta andando a chiamare il tuo
modulo di callback per fare il lavoro vero a
risolvi il problema che stai risolvendo
passiamo a kV come server gen
hanno ancora un modulo ogni altro
il modulo di collegamento inizia con un modulo
dichiarazione qui abbiamo questo questi sono
chiamato attributi dal modo in cui il comportamento
attributo e se sei inglese
puoi mettere au lì funziona ancora
o se ti piace fingere di essere
Inglese , non lo so, eccoci qui
dichiarare questo modulo è un callback
modulo per il server Jen quindi lo farà
ciò che il compilatore fa in questo caso è
guarda il modulo del server Jen che è
già stato compilato perché è arrivato
con la tua versione e il server Jen
modulo lo dice oh a proposito se qualcuno
si dichiara un modulo di callback
per me devono implementare seguendo
funzioni e ti dà una lista
il compilatore ottiene una lista di funzioni e se
non hai quelle funzioni nella tua
modulo allora
darti un avvertimento e dire hey se lo sei
diventerà un genere o un modulo di callback tu
dobbiamo implementare alcune funzioni che abbiamo
quella stessa API che avevamo prima di quale
è la nostra soluzione API, ma abbiamo anche
questi callback che dobbiamo supportare
e c’è un numero di loro che andrò
attraverso di loro è molto veloce, quindi c’è un
quando il vero processo del server
si avvia perché sei una sua funzione
sei una funzione in grado di creare il
stato che si desidera per questo loop e
dare al server gen che è piuttosto
molto quello che gestisce gestire come un
callback che gestisce una richiesta di risposta così
se faccio una chiamata di ricerca, ad esempio, voglio
per rispondere voglio il valore
è stato trovato con la sua chiave o eseguire il
la chiamata booleana di false handle sarebbe un modo
per farlo è come sincrono
richiesta di risposta e bassa casta che è come
ad esempio un messaggio di cancellazione unidirezionale
potrebbe essere fatto con un cast basta inviare
qualcosa dentro e dire hey cancella quella chiave
e potresti non interessarti che ci sia davvero
nessuna risposta a questo direbbe solo okay
probabilmente c’è qualcosa chiamato handle
informazioni che è immaginare che Lu riceva
tutte quelle cose che avevamo nella nostra precedente
esempio memorizza e trova quelle tuple se
ottiene il ciclo ottiene qualcosa
non sa poi andrà a
chiama la funzione di informazioni sulla maniglia e dì
hey Ho appena ricevuto questo messaggio , non lo so
che cos’è forse tu sai di cosa si tratta
un esempio di questo nella vita reale è se tu
avere un gen server che sta prendendo il TCP
messaggi del server Jenna non lo sa
TCP ma presumibilmente hai un socket
da qualche parte lì dentro e il socket ha preso un
messaggio in modo che chiami le informazioni sull’handle
chiama e dice hey c’è questo TCP
pacchetto puoi farlo girare è chiamato
quando il processo è in procinto di fermare questo è
dove puoi fare un po ‘di pulizia e poi
allenatore
è come si fanno gli aggiornamenti o downgrade così
codice codice Jayne cambia fondamentalmente cosa
succede che non ho intenzione di farlo
ma rapidamente è un po ‘il tuo processo
in esecuzione e il tipo di sistema simile
lo mette in pausa e dice che questa cosa deve
fai un aggiornamento che artiglierà il tuo
funzione di modifica del codice con lo stato che
hai al momento e ti permetti di darlo
torna qualche nuovo stato quindi se ne avessi un
stato che era come dire un record che
è un po ‘ come una struttura e tu vuoi
aggiungi un campo che potresti fare nel tuo
cambiare il codice restituendoti sai a
record diverso con quel campo aggiunto
in esso e poi una volta che ottiene il nuovo
dichiaro che ti fa ripartire e allontanarti
partire
così quei piccoli callback devi
implementare se hai intenzione di scrivere un jet
server dare un’occhiata a come lo facciamo
modo in cui avviare il server ordine del giorno in questo caso
è che abbiamo una funzione chiamata link iniziale
e tutto ciò che fa è chiamato gen server
il collegamento di inizio del collegamento di inizio è basicamente
avviare un processo e collegarlo ad esso
lo copriremo presto questa cosa locale
kb è un tupple che fondamentalmente dice a gen
server per registrare il processo che inizia
sotto questo nome kb quindi è così
registro chiamata ho mostrato in precedenza il
chiamate client kb start collegate che sono
questa funzione e semplicemente chiama questo
funzione e che restituisce ok e processo
ID proprio come prima dell’altro
cose alla fine come questa è la
modulo è chiamato anit
funzione di questo modulo questo è il
modulo di callback questo sarebbe qualsiasi
argomenti che vogliono essere passati a
ammettere che non ne abbiamo in questo caso e
allora questo è per il debug e
un server @kv di start-up abbiamo la nostra rete
funziona tutto ciò che fa è restituire il nostro stato
che è il negozio di mappe vuote è davvero
facile per il cliente perché chiama
avviso di chiamata gen server che non lo facciamo
devo passare il nostro bambino in questo caso
perché i gen server si prendono cura di questo
per noi bene passiamo ancora un paio con
Chiave KD e valore in esso per implementarlo
forniamo chiamata gestita che riceve
che si rovesciano come argomento e fondamentalmente
fa quello che ha fatto prima ma tu lo farai
avviso che ritorna un po ‘diverso
perché deve restituire un valore che è
noto al server Gen così gli uomini sono molto
si aspetta si aspetta che abbia risposto a cadere
torna a trovare simili abbiamo un caso
affermazione facendo la ricerca del mouse e
ritornare opportunamente fermato davvero
il server gen facile si ferma così tanto
è molto più semplice con gen server perché
sta facendo molto per te internals
di chiamata che abbiamo visto per il negozio e
trova funzioni la chiamata stessa gen
il server chiamato viene eseguito nel processo client
e quello che succede al suo interno è il cliente
monitora il processo stick del server a
monitorare il processo del server che è
molto economico dal modo in cui puoi farlo
molto rapidamente perché il server muore
il cliente vuole saperlo subito
il server viene utilizzato da altre cose
e potrebbe morire facilmente così tu vuoi
sapere se muore se questo invia il
richiesta a quel server lo elabora
ha un timeout in attesa di default cinque
secondi puoi cambiarlo se vuoi
e quindi presumibilmente se la risposta arriva
di ritorno da questo
quindi viene restituito al chiamante così
è abbastanza semplice, quindi i comportamenti sono gentili
di gestire un sacco di questo monitoraggio e
roba per te c’è qualcosa chiamato
il modulo SIS che è come il sistema
parla di comportamenti dietro le quinte a
fare cose come l’aggiornamento del codice
e spegni e tutto quel genere di cose
dato che di per sé è abbastanza c’è molto dentro
ma ci sono solo un paio di cose
volevo mostrarti così questo è l’Erlang
shell puoi semplicemente digitare URL e ottenere il
shell questa cosa è il prompt così numero
uno e qui sto chiamando il nostro link di partenza
funzione e torno okay ragazzino così ragazzino
è rappresentato nella shell era questo
cosa strana 0:36 zero posso quindi chiamare
systrace con quel pin è una vera volta
Io do quello al jet server che noi
iniziato qui viene rintracciato quindi se invio un
messaggio ad esso chiamando bene per
esempio trovare vai a possiamo vedere questi
i messaggi che compaiono nel guscio che
dì oh okay ho ricevuto questa chiamata
genzler o chiama l’argomento find vai a
dal 34 che siamo noi stessi vediamo
erano 34 e poi è stato inviato false a 34
e poi vedi il risultato stampato qui
falso, quindi se stai lavorando con a
comportamento così facile da attivare la traccia
come questo
e ottenere messaggi come quelli che escono e
aiutare il debug di quello che sta succedendo che è
tutto costruito in uno dei miei preferiti
quelli è qualcosa che effettivamente aggiunto alla
Erlang me stesso si sporca così se vuoi
per guardare lo stato che è nel kv
processo si può solo dire ottenere stato e
ti mostra questa è la mappa che noi
bloccato con la chiave andare a chicago in
e c’è anche qualcosa chiamato
stato sostituito che se si sta eseguendo il debug
potresti inserire una mappa completamente nuova
se vuoi provare qualche angolo strano
caso fatto sostituire lo stato pure così
quelle sono alcune cose che ho aggiunto alcune
anni fa andrà presto
attraverso applicazioni e supervisori noi
avere circa cinque minuti quindi l’applicazione
è abbastanza semplice in pratica
ti aiuta a impacchettare la tua supervisione
albero
roba che inizia lo stesso stop-start è questo
sequenza gerarchica così ha il colonnello
qualcosa ha chiamato un’applicazione
controller che sta per iniziare
ogni applicazione master e quindi il
il master inizierà la parte superiore
supervisore di livello per la tua applicazione
quel top supervisor inizierà
tutti i suoi figli ne hai fatti altri
supervisori o lavoratori così tanto
le applicazioni hanno questo aspetto
modulo qualsiasi cosa tu lo chiami qui è
immaginariamente chiamato la mia app è a
comportamento quindi è un comportamento dell’applicazione
questa volta deve esportare start e stop
la funzione di avvio chiama solo il
supervisore e lo avvia e la fermata
la funzione dice solo ok quasi tutti
applicazione che hai mai visto nel nostro
la linea sembra che potrebbe essere di più
coinvolti ci sono altre cose che puoi fare
con la maggior parte aspetto come ho detto prima
operai e supervisori
logica applicativa e supervisori
guardato la logica dell’applicazione per fare
certo che non ci sono errori in questo modo
in pratica è un po ‘ come questo tu
avere questa semplice applicazione core data
ecco il supervisore di alto livello che inizia
un altro supervisore
quelli stanno entrambi iniziando alcuni lavoratori
questa cosa è banale abbiamo visto il
banalità dell’applicazione su
lo stesso supervisore di slide precedente
implementato come un gen server è carino
il semplice a tutto il duro lavoro è fatto
quaggiù quindi questa cosa offre un bel
base per la tua applicazione anche se questi
fallire tipo di tornare qui e te
può riavviare le cose agire per gestire
gli errori ci sono un sacco di modi di
iniziare i lavoratori ma sai che potresti
avere lavoratori per esempio abbiamo iniziato a
kV e poi un gruppo di clienti che vogliamo
il kV per venire prima dei clienti
perché i clienti vogliono usare
quindi possiamo metterli in un certo ordine
e usa il resto per una strategia, quindi se
il kV muore vogliamo tutti i clienti
essere ucciso anche
puoi anche avere un one-for-one che
Dice solo che ho un sacco di lavoratori
sono una specie di indipendente se uno di
loro muoiono appena ricominciano colui che è morto
lascia solo gli altri, c’è molto
flessibilità lì e poi puoi avere
numero massimo di riavvii per periodo
questo è un escalation di un fallimento, così tu
non sederti e muoviti per sempre
cercando di riavviare qualcosa che non è mai
andando a ricominciare questo è solo un bambino
specifica che mostra come avviarsi
un bambino puoi vedere che è una mappa e
ha certi campi che devono essere
compilato così nell’originale
soluzione del server muore se il
il server muore mentre il client ha un
richiesta in sospeso o un server richiede
troppo a lungo per elaborare qualcosa come è
quel codice che codice originale se tu fossi
per tornare alle mie diapositive lo otterrò
codice originale a cui non fa niente
maneggiare una di quelle cose ancora quando tu
usa il gen server che gestisce tutto questo
roba a causa del monitoraggio del
tempo scaduto
sai il fatto che gestisce il sistema
messaggi e può trattare con questo e il
fatto che è supervisionato da un
supervisore significa che molti errori
e i problemi sono semplicemente gestiti
per te seguendo le regole grazie
quindi ci avvolgiamo in sui vantaggi di
i comportamenti stanno gestendo l’ angolo difficile
casi la capacità di guardare qualcosa
e dire oh è un gen server so cosa
che fa ogni anno un programmatore di Lang
sa cosa questi comportamenti sono quello che loro
faccio così posso guardare il codice di nessuno e
tipo di seguirlo abbastanza facilmente tutto il
casi d’angolo che ho citato ma quelli
casi angolari nascono a causa degli anni
di questa roba utilizzata nella produzione
e tipo di trovarli nel modo più duro
molto è stato testato e testato
solo un rapido controllo e tutto il genere
di roba così tanto c’è molto di più
andare TP di quello che ho mostrato me ma noi
hanno solo 50 minuti ci sono i
comportamenti ho menzionato che non l’abbiamo fatto
anche coprire le macchine a stati finiti il
roba di manipolazione di alto livello che puoi scrivere
il tuo comportamento un quadro così completo
per quella confezione e la distribuzione è quella
come un intero parlando con se stesso aggiornamenti
lo stesso affare quindi c’è molto se tu
voglio più informazioni è appena uscito
l’ultimo libro che ho scritto era su corpus 17
anni fa, questo è un po ‘diverso
è uscito in eBook
Venerdì e dovrei uscire
questa settimana penso così Francesco Cesare me
e ho scritto che
Francesco ha anche scritto un libro in precedenza
con Simon Thompson chiamato Erlang
programmazione è un grande libro da imparare
giusto e ragazzo di nome Fred hey bear
ha scritto questo bit usando Erlang e la rabbia così
lavora a Heroku e usa la sua posa
lì e ha scritto un sacco di cose
si tratta di usare Erlang e
la produzione è d’oro e poi se lo sei
in elisir si potrebbe semplicemente andare nel
sito di elisir ne hanno di grandi
imparare le risorse lì e ricordarsi di
vota questa sessione grazie
Ho solo bloccato alcune diapositive che danno un
piccolo tutorial lo affronteremo
vero veloce ma prima quello che è Erlang
linguaggio funzionale orientato alla concorrenza
ha tipi forti di tipi dinamici
quindi non c’è controllo di tipo statico
controllando si incontrano problemi a
runtime è un linguaggio molto piccolo se
l’hai usato ne ha solo alcuni
elementi e parlare di quelli che presto è
una macchina virtuale che esegue un codice byte
chiamato beam e ha un built-in
sistema imperniato presenta l’Erlang
il linguaggio è venuto da Ericsson nel
metà degli anni ’80
un ragazzo di nome Joe Armstrong ha iniziato
ricerca su come costruire interruttori come
costruire linguaggi che si potrebbero utilizzare per
costruire interruttori più affidabili
e più economico e migliore
e Broadwick che brucia e Mike Williams
poi è arrivato per aiutarli dal
All’inizio degli anni ’90 Erlang era una lingua reale
cosa che quello che ho intenzione di parlare di oggi
quando la TV è arrivata nel 96 e poi
si scagliare in OTP erano aperte source
nel 1998 da allora è ancora
gestito da Ericsson con il team
là quello fa quello in loro aprono
contributi alla fonte che ho contribuito
un po ‘al virtuale di Erlang
macchina e linguaggio come altri a
bella piccola comunità pensa al
requisiti delle telecomunicazioni di cui hanno bisogno
un gran numero di attività concorrenti
perché non vuoi passare a solo
fai una telefonata alla volta che vuoi
essere tollerante del fallimento dell’hardware
e software e per farlo e tu no
solo bisogno di componenti che ti avrei aiutato con quella
che tu
distribuzione perché in definitiva in grado di
fallo e vuoi un sistema che possa
operare per anni con tempi di fermo minimi
le compagnie telefoniche potrebbero trovare la loro
gli interruttori scendono per più di tre o
quattro minuti all’anno ogni passato a
trovare abbastanza pesantemente così è con
cinque nove cinque nove all’anno quindi loro
voglio essere in grado di fare aggiornamenti in tempo reale e
manutenzione in modo da non dover prendere un
passa giù ora potresti pensare di no
lavoro in telecom che cosa mi interessa perché lo faccio
cura di questa roba e della ragione per te
la cura è se pensi a quello di oggi
applicazioni web cloud per applicazioni
applicazioni applicazioni di big data micro
applicazioni di servizio che tutti vogliono
stessa cosa tutti devono essere su tutti
il tempo in cui vogliono eseguire il failover in
caso di errore e sistemi distribuiti
problemi tutto questo, quindi questo è il motivo
Erlang, penso che tu sappia che mantiene ancora
popolarità e continua a far crescere le persone
stanno scoprendo che in realtà fa questo
Roba molto bene la stessa Erlang VM
può eseguire più lingue così è Erlang
una lingua sulla VM c’è elisir come
molte persone hanno provato lecca esso
sembra essere molto popolare
popolarità perché è tipo di aspetto
come Ruby hanno fatto un buon lavoro
quella lingua ci sono un paio di parole
lista aromatizzata Erlang e Java così quelli
sono una lista classica con tutti i macro e
tutto ciò che funziona sulla VM esiste a
linguaggio chiamato 15 che è una specie di
ispirato al Python Credo di aver
mai usato e c’è altro tipo di
piccolo di cui parliamo le lingue
processi così procedono in Erlang c’è a
l’intero modello per i processi è molto
molto importante di quello di cui parleremo
oggi
elaborare la VM supporta leggero
fili verdi quindi ricordo indietro uno dei
i primi discorsi che ho avuto
un vecchio MacBook e su quel MacBook
probabilmente 2008-2009 potrei iniziare milioni
attraverso questa notizia in mezzo secondo così
è solo migliorato entrambi
le applicazioni non utilizzano il mulino in
processi di pratica ne ho scritti alcuni
quello ha richiesto fino a 200.000 quindi è bello
avere quando ne hai bisogno ma la maggior parte no
usa molte ma tutte le applicazioni usano
più processi se lo sanno
o no il runtime stesso elabora
programmazione e quelle procedure di prelazione
in modo da far funzionare il processo per un po ‘
scambiarlo fuori e ottenere un altro in esecuzione
non c’è niente che devi fare nella vostra
codice per farlo accadere
c’è una funzionalità chiamata linking e
monitoraggio di due funzionalità che in realtà collegano
e per fare due processi insieme
il monitoraggio è quando un monitor di processo
è un altro di cui parliamo molto di più
che più tardi mmm è molto importante
caratteristica per la tolleranza ai guasti, quindi quando a
il processore viene eseguito solo in Erlang
funzione e quella funzione può naturalmente
chiamare altre funzioni, ma non appena che
funzione ed è il processo e nel
processo riscontra un’eccezione inaspettata
poi il processo muore o se qualcuno
uccide il processo il processo muore I
menzione preventiva prima del virtuale
la macchina eseguirà un processo per qualcosa
chiamato mm mm di qualcosa chiamato a
riduzione la riduzione è quasi come a
funzione che chiamiamo tipo di equivalente a a
chiamata di funzione e verrà eseguito su
2000 quelli preempted per un altro processo
se è a corto di quello e va
in un’attesa in attesa di un messaggio da
un altro processo e non ha messaggi
nella sua coda
lo scheduler o la VM verranno preventivati
se lo fa conosco la prelazione quindi c’è
un sacco di regole su come le cose
vieni reimpostato come programmatore
non devi davvero fare nulla per te
non devi chiamare rendimento che non hai
fare qualsiasi prelazione cooperativa
te stesso che la VM si prende cura di questo per
tu guardiamo come viene messo il sistema
insieme la maggior parte non conosco persone nel
indietro e vedere questo, ma c’è un po ‘di CPU
core qui o uno fino a core e
la maggior parte dei sistemi oggi è multi-core
hai in cima che il tuo funzionamento
thread di sistema e kernel su cui si basa la VM
Oltre a questo e per tutto da
predefinito per ogni core che ottieni
c’è un programmatore all’interno della VM
tutti questi thread dello scheduler
quelli sono i thread del kernel e ognuno di essi
il thread dello scheduler ha le code di esecuzione così
le code di esecuzione sono dove i processi
ottenere memorizzati i programmi di pianificazione andare lì correre
le code prenderanno un processo
eseguirlo come ho descritto prima di mettere
nella parte posteriore della coda ne prende un’altra
uno se nessuno di loro finisce il lavoro loro
può rubare dagli altri questi
gli scheduler meritano di essere studiati se tu
mai avere tempo perché non sono solo
piccole cose stupide che stanno tirando fuori questo
la coda è un bel po ‘ di mestiere che è
andato in queste cose sono altamente
tutti indipendenti sono in esecuzione
essenzialmente l’emulatore circonda la cosa
che esegue tutto il bytecode così ogni
lo scheduler sta eseguendo quel ciclo e come
risultato che tipo di tutti stanno facendo il
stessa cosa ma in tempi diversi per
mantenerli indipendenti riducono al minimo
bloccando tra loro cercano di non farlo
condividere qualsiasi cosa i casi in cui lo fanno
condividere le cose che ancora cercano di
evitare di bloccare a tutti i costi, quindi è così
in pratica sto solo cercando di condividere il meno possibile
il più possibile attraverso questi scheduler
c’è stato un sacco di lavoro che è andato via
in questi cinque anni fa Holika
fare un cubo condiviso da un gioielliere
test di scalabilità che il team ha trovato
lo hanno fatto in questo modo è semplicemente ridimensionato
meglio così le persone stanno migliorando sempre
gli scheduler quante persone hanno
sentito dire che si blocca per girli è gentile
di famosi per quello penso così Joe
Armstrong ha un dottorato in Erlang che potresti essere
l’ unica persona, ma se leggi quel dottorato
che è molto leggibile un sacco di dottori di ricerca sono
tipo di secco o qualsiasi altra cosa, ma questo è
abbastanza leggibili queste sono alcune citazioni
da lì lascia che sia l’ altro
processo fai il recupero della freccia lascialo
crash non programma in modo difensivo e
quando ci pensi , sono sicuro che ce l’abbiamo
tutto visto codice o fare come un try-catch in
la presa ti dirà solo una correzione del commento
me o commento non so cosa fare
qui o sai solo che non sai nemmeno
fare qualcosa in anticipo non è che tu
non trattare con c’è che sei tu
devi sempre fare se ci sei solo
trattare con loro in modo diverso parleremo
più su questo quando vado attraverso così perché
hai tutta questa concorrenza è giusta
essere cool o sì, non è perché è
di affidabilità quindi ricorda il tutto
cosa pensi della nostra lingua?
costruire interruttori affidabili e che cosa
la concorrenza ti dà un po ‘di isolamento
sai in tutti i mari che sono tutti
in esecuzione nella stessa macchina virtuale ma
non condividono la memoria o il fatto che
sono nello stesso processo che contattano
a vicenda attraverso il messaggio più velocemente
non mi piace mai raggiungere lo stesso
memoria per il recupero
Ho menzionato link e monitor in precedenza
ciò che consente è un processo da guardare
un altro processo e questo sono stato
facendo tutto il lavoro e questo è giusto
tipo di andare in giro a dire perché
ancora c’è, va bene, dovrebbero
muore perché colpisce qualcosa di inaspettato
eccezione questa può agire e
di solito ciò significa che sta riavviando
il processo e poi di nuovo per avere un
sistema fault-tolerant
tutti i computer, quindi tutto questo funziona
più computer se si desidera inviare un
messaggio a un processo in realtà non
importa se è nella tua VM o in un’altra
VM sullo stesso nodo o su un’altra VM
il network
sai sotto gli effetti di rete
gestione della latenza e fallimento parziale
fondamentalmente il modello di processo è lo stesso
tutto qui è una rapida panoramica di Erlang
ci sono solo pochi elementi nella lingua
Non ho intenzione di leggere, ma questo è
tipo della maggior parte degli atomi si vede a
sono solo nomi o solo valori
con i nomi non si sa quale sia il valore
è come Enuma e c ++ per esempio
ha un valore ma dovresti usarlo
è che solo un nome simile qui quelli
sono le variabili in lettere minuscole
le variabili in maiuscolo non sono variabili
sono funzioni immutabili di Danny
i nomi dei moduli sono variabili Adams in diretta
all’interno delle funzioni non ci sono Global
le funzioni vivono all’interno dei moduli che vedremo
alcuni esempi di tali funzioni sono
identificato dal loro nome e dalla loro era T
quanti argomenti hanno e poi?
puoi anche avere funzioni anonime
le funzioni possono essere esportate da un modulo
per renderli visibili ad altri moduli
e chiamabile da altri moduli o lì
possono essere internals che sono chiamati
solo all’interno di quel modulo e poi
le funzioni possono anche essere passate come
gli argomenti restituiscono quei valori farciti
in altre strutture di dati di ordine superiore
funziona fondamentalmente perché il loro Lang
è un compito linguistico funzionale
pattern matching quindi se ne hai uno
la variabile che non ha binding ha no
valore e dico barnacles variabile a
allora il potere ora è legato a – se dico
bar è uguale a di nuovo è un po ‘come un
assertion yes bar is – I match to a bar
ed è vero se dico bar uguale a 3 questo
provoca un’eccezione chiamata corrispondenza errata
perché il bar ha circa come
– e – ovviamente non sono tre così
ci vuole un po ‘per abituarsi ma lo siamo
abituarsi molto velocemente
c’è anche il pattern matching in
funziona così se ho una funzione foo
questo dice che foo prende una lista vuota
e se ottiene una lista vuota come un
argomento che la lista che conosci è abbinata
e avrei eseguito qualsiasi cosa fosse vuota
elenca la versione di foo è per qualsiasi altra cosa
Ottengo una variabile denominata lista vincolata
al valore passato presumibilmente di
elenco non vuoto ma ancora a causa di
tipizzazione dinamica potrebbe essere qualsiasi cosa, ma
il runtime selezionerà questa versione di
chi l’ha detto per qualcosa di diverso
c’è un’espressione di caso che hai usato
un po ‘è un modo di abbinare in modo
hai un valore o il ritorno di a
funzione o qualcosa si può dire caso
bla bla bla e abbina tutti i valori
quello potrebbe tornare là è di default
corrispondenze e pattern matching in
teste funzione abbiamo tipo di sega su un
slide precedente ma ecco un esempio di
cibo prendendo due argomenti dove loro
deve essere lo stesso valore così questo
impone che qui è un idioma molto comune
dove dici che bar prende una lista deve essere
non vuoto deve avere almeno uno
elemento che l’elemento sta per essere
chiamato H e il resto della lista è T
quindi vedi molte funzioni ricorsive
quello prenderà una lista come quella che sarà
togli la testa dalla lista fai un po ‘
azione e passare T a se stesso come il resto
della lista e quindi in genere finiscono
la funzione per quello sta prendendo voi sapete
abbinare la lista vuota e terminare il
ricorsione in modo da vedere questo un po ‘come
bene il messaggio che passa così se ne hai uno
ID processo questo è un ID processo variabile
in possesso di un ID processo è possibile utilizzare il
punto esclamativo da inviare
un tale messaggio può essere il tuo termine di vita
potrebbe essere un atom strangle è numerato o
qualunque cosa
un altro ID di processo che puoi registrare
processi sia a livello locale che globale
ci sono alcuni registri che vengono con
Erlang va TP e poi altri lo sono stati
costruito per vari motivi di diverso
tipi di qualità di distribuzione così
ora sai dove entrano
OTP così ITP aumenta Erlang è come un
strato costruito su Burlington e OTP
sta per piattaforma di telecomunicazioni aperta noi
di solito non usi più quel nome
perché non è specifico per le telecomunicazioni, quindi noi
chiamalo OTP OTP aggiunge altro
librerie un sacco di strumenti e a
mazzo di principi che sono davvero come
usi il sistema nessuno usa Erlang di
di per sé è sempre lì come TP
quindi sono un po ‘ ora tutto ciò che sono
dicendo ma hanno ancora un tipo di
nomi distinti i principi di progettazione noi
può camminare attraverso quelli c’è comportamenti
Parlerò un po ‘ di questo
questi sono solo piccoli quadri
quadri di frasi classiche che sono
soluzioni parziali ai problemi comuni
tipicamente quello che fai è estendere il
comportamento con il proprio codice per rendere il
soluzione completa proprio come il framework
c’è qualcosa chiamato la supervisione
albero che è una gerarchia di processi I.
accennato in precedenza come si può avere un
processo facendo qualcosa in un altro
osservandolo bene questo processo è il
lavoratore e colui che lo guarda come un
supervisore di eventuali supervisori responsabili
qui Oh tipo di qui qui a fare
questo ma probabilmente sei nel tuo
modalità di supervisione ti stai solo seduto
intorno e guarda tutti proprio così
è una specie di
che le applicazioni stanno davvero prendendo
questi alberi di supervisione e gli operai
e tutto ciò che li impacchetta
risorse utilizzate dal sistema come Jason
fiale o sai qualunque cosa e alcuni
dati di configurazione e tipo di messa
che tutti insieme e questo è un
applicazione
allora hai delle versioni che sono
collezioni di applicazioni confezionate
insieme come uno schierabile possedere è un
in esecuzione rilascio in pratica si prende il
rilascio metterlo su una nota farlo funzionare
e questo è distribuito la gestione del rilascio è
quando hai un rilascio in corso e tu
può aggiornarlo o eseguirne il downgrade
l’ appartamento operativo dal vivo e poi
i cluster sono solo nodi interconnessi
quindi hai questo tipo di intera gerarchia
di voi sapete partendo da tutti i processi
la via fino a un sistema distribuito e
quelli a lungo
ci sono solo principi di design che raccontano
come fare tutto ciò che fornisce OTP
ciò che TP offre anche altre cose come
un sacco di strumenti per le operazioni
monitoraggio della gestione come impacchettare
rilasci e se quelli preparati per
strumenti di implementazione per fare il debugging
copertura di test facendo fare test
misurazione delle prestazioni è solo un
un sacco di cose e riflette il
il fatto che il sistema sia in giro per a
molto tempo e queste sono cose che
le persone usano in produzione e tu sai
la cosa bella è che si sono evoluti
nel tempo quindi ci sono alcuni pacchetti che
sai utilizzato per essere utilizzati che non sono
utilizzati come più molto e alla fine
tipo di trovare la loro via d’uscita da OTP mentre
le cose più nuove arrivano così i tuoi modi di
osservando un sistema in esecuzione e guardando
relazioni tra processi e
tracciando i comportamenti e tutto il genere di
roba così l’intero sistema si evolve
costantemente c’è una nuova versione di aria
rivestimento in genere ogni 12 a 13 mesi
così il prossimo mese uscirà Erlang 19
sistema in continua evoluzione ora parliamo
riguardo i comportamenti c’è un sacco di
comportamenti standard gens server è il
il più usato è un client-server
modello passo attraverso un grande esempio con
Gen server c’è gen FSM che è
macchine a stati finiti e una novità assoluta
comportamento macchina di stato chiamato stato gens
e questo non è ancora abbastanza disponibile
sarà disponibile quando questo nuovo
l’uscita esce l’evento gen del mese prossimo
è un framework di gestione degli eventi e quindi
c’è il supervisore che ho menzionato prima
applicazione che ho menzionato prima così
qual è lo scopo di un comportamento il
scopo primario è quello di separare il
parti generiche di una soluzione da quelle
dalle parti specifiche del dominio, quindi tu
avere un sacco di caratteristiche che
è necessario per il tipo di tutti i server client
per esempio gen server contiene tutto questo
Ti mostrerò più tardi come fai
Server di Jenna e estenderlo con il proprio
codice per risolvere il tuo problema c’è a
sacco di casi d’ angolo rappresentati nel
codice così le cose hanno imparato nel corso degli anni
potresti pensare che probabilmente hai sentito
sai
non devi gestire il blocco e
non è come il solito multi-threaded
programmando non ti occupi di gara
condizioni e tutto questo e quello è
in parte vero, hai sempre a che fare con la razza
condizioni è solo che qui un sacco di
è stato risolto perché queste cose
sono stati in giro così a lungo e in
produzione così lunga che questi angoli
i casi si sono presentati e sono stati
collegato in modo sì sì è proprio come un
raccolta di moduli riutilizzabili che sono
utile per un numero di domini per
risolvendo problemi comuni c’è anche
tutta questa storia di OTP e se tu
seguire tutte le regole di OTP segui il
principi di progettazione e tutto ciò che ottieni
molto indietro e ritorno così cose simili
essere in grado di avviare la tua applicazione
essere in grado di inserire la tua applicazione
una raccolta di altre applicazioni che
potrebbe anche non averti conosciuto
potrebbe essere che qualcuno ha scritto un
applicazione a qualcun altro ha scritto B e
qualcuno tipo a valle di afferrare entrambi
li poi li mette insieme in un modo
che nessuno ha previsto se segui il
regole che funzioneranno bene se tu
non accadranno cose cattive
per fortuna tutti gli strumenti nerd li hanno
tipo di rendere facile seguire le regole
ma cose come l’avvio e l’arresto
la tua applicazione non sembra difficile
a meno che tu non abbia dipendenze da altro
applicazioni come si forza l’ordine
beh, TP lo fa per te che osservi
e il monitoraggio è in grado di eseguire il debug
le cose devono sempre tornare indietro e dire oh
Ho dimenticato di mettere tutte le mie stampe nel
codice come ho intenzione di fare, ma questo
imballaggio e rilascio dicendo di fare live
aggiornamenti è tutto il tipo di prescritto per
così eseguiamo un esempio è
tipo di non un esempio molto interessante
perché volevo mantenere le cose semplici in modo
c’è un server p-value che elabora una chiave
il processo del value server è solo un processo
è in esecuzione che ti consente di memorizzare le chiavi
insieme ai valori
e dopo puoi andare a chiedere se lo è
ha una certa chiave e se non la dà
tu il valore e se così non sarà
ti dico che non ho quel valore che sarà
ti permettono di cancellare chiavi e valori di
Certo e poi sai che vuoi
più client per essere in grado di usarlo
cosa così potresti immaginare di avere
qualcosa come un denaro lo sai
solo memorizzare nella cache i valori di più client
usandolo la ragione per cui dico che non è molto
un buon esempio è naturalmente che arriva Erlang
con negozi di valore chiave di tre o quattro
comunque , ma ancora una volta questo lo rende semplice
e tutti possono capirlo e io
non devi mettere un sacco di codice sul
scivola quindi quali sono i problemi che siamo
cercherò di definire la nostra chiave
value server che sarà uno dei
mantenere lo stato del server certamente no
voglio dire chiave di archivio e valore e
Dice che l’ho fatto e poi tu dici okay dammi
quello di cui non so stai parlando
su così tu vuoi essere in grado di mantenere il
stato del server devi essere in grado
per iniziare, basta che i clienti lo siano
in grado di individuare il server e parlarci
e il server deve gestire il client
le richieste danno un senso alle richieste
entrare se c’è qualche errore deve
trattare con quelli, ma deve anche essere
in grado di rispondere ai clienti e dare
indietro quello che hanno chiesto
così stato del processo è di tipo interessante
Le variabili di Erlang sono immutabili e lì
non ci sono variabili globali quindi come stai
avere un processo del server che può memorizzare
affermare in un modo sarebbe solo scrivere
tutto tranne il disco ma questo è un
server in memoria , quindi non è così
andando a lavorare potremmo imbrogliare e usare il genere
dei punteggi interni di Erlang
e lo facciamo nei nostri esempi
ma questo non è il vero punto che sto cercando
per arrivare ad ogni processo del server in OTP
ha questa cosa che ha ricevuto tutto
valutando così quello che succede c’è come me
detti processi precedenti eseguono funzioni
dire una funzione che presumibilmente è una chiave
funzione value server è un loop
e il Louvre ha solo uno stato e
riceve un messaggio e dice cosa devo fare
con questo messaggio se è come un negozio
messaggio in cui verrà inserito un valore chiave
il suo stato e crea un nuovo stato, se lo è
una cancellazione eliminerà la chiave e
il valore e creare un nuovo stato
qualunque cosa faccia , potrebbe crearne una nuova
affermare che potrebbe essere solo una ricerca
l’educazione sarebbe lo stesso stato ma a
Alla fine della funzione hai il
stato essere un nuovo o vecchio e basta chiamare
te stesso con quello stato quindi lo stato di
la funzione è appena stata conservata come un
argomento in modo che assomigli a questo
abbiamo solo il nostro stato in arrivo che abbiamo
un ricevere qui che gestisce i messaggi
questi sono solo commenti , non è così
in realtà facendo qualsiasi cosa e presumibilmente
questa dichiarazione di ricezione restituisce uno stato
potrebbe essere nuovo potrebbe essere vecchio che ottiene un
nuovo stato e poi chiamiamo di nuovo il ciclo
con il nuovo stato è piuttosto semplice ma io
ricorda quando stavo imparando Erlang I
tipo di chiedersi come tutti questi comportamenti
sai come fanno queste cose sotto
le copertine e vai a guardare il codice il
il codice ha molto, c’è molto codice
lì perché sta gestendo molto
casi d’angolo, ma fondamentalmente solo
funziona in questo modo per i diagrammi in pratica
che il nostro server si avvia e chiama
inizializzare ha qualche inizializzazione ma
poi va nel suo ciclo e si siede appena
lì forse sta cambiando il suo stato
alla fine qualcuno lo dice e basta
esce e forse non ripulisce
okay, questo è il problema risolto
su come iniziare a fermare bene il server
è abbastanza facile perché in Erlang
processo può generare un altro processo
c’è una funzione integrata per questo per
fermandoti, semplicemente lo invierai a
Messaggio
invia letteralmente l’ atom stop e quello
la cosa può ricevere azioni e andare avanti
Dovrei smettere di smettere e uscire così in
termini di avvio di un server KB che potremmo
basta avere un modulo kv in cui esporteremo
funzione per iniziare con fermare questi zeri
significa solo che non accettano argomenti
l’inizio sta appena generando una funzione nel
il modulo kv si chiama Lugh e ne passiamo uno
argomento questa cosa dall’aspetto divertente qui
è una mappa vuota o semplicemente usando una mappa
internamente per memorizzare le nostre chiavi e valori
torniamo all’ID del processo da spawn noi
quindi chiama registro e inserisci il nome K V
quindi voglio registrare questo processo dato
per ID di processo sotto il nome K bean che
consente ai clienti di andare e chiedere il
registro dove è KV e ottiene il
idea di processo che è quella in cui torniamo
questo Tuggle che va bene all’animale K
è molto comunemente usato in Erlang per
indicare il successo va bene e poi quello
processo ID così il chiamante di start ottiene
questa parte posteriore è doppiamente carina
l’arresto diretto è uguale
Semplicemente abbiamo solo una funzione
smettiamo di prendere il nome KV che è
registrati sotto questo processo abbiamo iniziato
e invia il messaggio stop e poi noi
solo tornare okay non ci interessa davvero
se c’è una risposta a questo o altro
altrimenti finirà per ricevere il messaggio
e fermati se è ancora vivo
un codice server per l’arresto è un po ‘di più
interessante ma non è quello
interessante è solo il nostro ciclo e il nostro
ricevere blocco e tutto ciò che stiamo dicendo è
ricevere e vedo un messaggio che è il
Adam smettila di tornare, okay, non farlo
qualsiasi altra cosa perché non stiamo chiamando
la funzione ricorsivamente il ciclo
la funzione termina e quando la funzione loop
Termina il processo se ne va guardiamo
l’API o il nostro server di nuovo abbiamo il nostro
dichiarazione del modulo chiamata kV abbiamo tutto
le nostre esportazioni si prega di fare tutti questi
funzioni visibili all’esterno del modulo kV
in modo che altri possano chiamare altri moduli
store prende una chiave e valore e it
lo memorizza Non mostro il codice attuale
basta commentare bene ci vuole una chiave
o restituisce una tupla che è la
chiave e il valore o restituisce un valore booleano
falso questo è un caso in cui il tipo di Erlang
di digitazione libera è un po ‘di aiuto in
altre lingue che dovresti usare
come un certo tipo o qualcosa da dire I
voglio restituire due cose diverse
qui stiamo solo dicendo che sta andando
essere una coppia o sarà falso
elimina solo invia la chiave e se lo è
lì lo elimina se non non lo fa
il codice client per la memorizzazione prende una chiave e
il valore
usa il nome kV il nome registrato di
il nostro processo e invia un messaggio
messaggio è questa coppia con quattro
elementi il negozio atomico che è quasi
come un’istruzione a questo punto
digitare il valore che è stato passato in e
sé come funzione costruita
in Erlang per ottenere il tuo processo
ID una volta inviato il messaggio al cliente
entra in una ricezione e dice solo che sono
in attesa di ricevere ok una volta ricevuto
okay, raggiungo il diario
e ho fatto e questo è ciò che mostrerò
tu perché inviamo il nostro processo in cui penso
la versione del server il server ha il suo
loop così qui abbiamo ricevuto che abbiamo
stop che abbiamo avuto sulla diapositiva precedente
o la cosa precedente che abbiamo implementato così
se ci fermiamo torniamo a posto la
punto e virgola significa un po ‘come o se noi
fallo fare questo o se otteniamo questo
doppio che è il valore della chiave del nostro negozio
ID di processo inseriamo la chiave nel valore
nella nostra mappa che ci dà una nuova mappa noi
invia il messaggio
ok, torna a questa idea di processo che era
passato a noi
questo fa sì che il cliente sappia ehi
va bene, ragazzo ha fatto il negozio e poi
con la nuova mappa che chiamiamo loop
ricorsivamente
ora che la ricorsione è ricorsiva alla coda
non è presente alcun proprietario di prodotti stack
per sempre e sempre e sempre più a lungo
il tuo computer rimane in esecuzione cerca e
I cancelli sono costruiti davvero allo stesso modo
solo con diverse tuple, quindi prendi
la richiesta pubblica forse per te bene
probabilmente usa l’atom find che passa il
chiave e sei denocciolato dal cliente
il server riceverà Tuggle
cercalo nella mappa restituisci il
valore appropriato o inviare Ansari inviare
il valore appropriato per il cliente
eliminare allo stesso modo ho intenzione di chiedere
una domanda visto che non mi stai chiedendo
qualsiasi parte di ciò che ti ho appena mostrato
sono generici e quali parti sono
specifico per un archivio di valori chiave
non saltare tutti in una volta, va bene così
sembra generico per una chiave Valley okay cosa
se non era un valore chiave ce ne sono
parti di ciò che potresti tenere bene
anche se intendo l’unica linea che sexy di
lo stato è l’unica cosa specifica della chiave
valore che il ciclo sembra uno schema
che tornare a posto sembra quasi come
il modello quindi è solo quello che grazie
ragazzi per il messaggio è e quello è
ciò che memorizza l’affermazione costruisce un nuovo
stato okay eccellente
così semplicemente ripetendo per il video e
stai dicendo che tutta questa storia
si sa solo la memorizzazione di un valore in una mappa
è specifico per kV ma l’intera idea di
looping e ricezione di valori e poi
inviare risposte al cliente è carina
sì generico
bene si le parti generiche stanno generando
un server che conosci che genera un server
sempre lo stesso che chiami una forma di
spawn gli dai un modulo e una funzione
e alcuni argomenti la gestione del
lo stato del loop è la stessa cosa, giusto è
solo lo stato è diverso ma il ciclo
è lo stesso come si invia un client
la richiesta è la stessa che è come a
funzione incorporata di Erlang e idem
per le risposte del server è tutto uguale
– e quindi l’arresto del server è il
lo stesso vale West fuori dal giro il
parti specifiche della soluzione hanno a che fare con
inizializzazione
perché il tuo stato sarà
diverso, quindi bisogna inizializzarlo
diversamente basato su qualunque cosa sia
stai scrivendo per la nostra soluzione per KD
abbiamo usato una mappa come una mappa vuota così
questo è lo stato delle richieste che sono
inviato dal cliente e le risposte
dal server sono specifici per
soluzione perché sai che c’è
diversi valori coinvolti in diversi
comanda se vuoi essere coinvolto e poi
qualsiasi pulizia se c’è qualcosa di te
devi fare al tuo stato alla fine di
pulire
se vuoi la storia della persistenza che hai
andare e svuotare qualcosa che disco o
qualcosa ma è anche specifico e
questo è davvero ciò che i comportamenti sono circa
i comportamenti prendono tutte le cose generiche e
mettilo in un modulo comportamentale quindi se vai
guarda nella tua compagnia aerea e vai
e guarda gen server c’è un gen
modulo server e fa esattamente questo
prende tutte le parti generiche
modello client-server , se lo si desidera
chiamiamoli pacchetti di questi e
questo è ciò che ti offre il server Genna
il comportamento si aspetta di essere inizializzato
con quello che viene chiamato un modulo di callback a
il modulo di callback è ciò che scrivi è
ha ottenuto tutte le parti che hanno risolto il
problema che stai cercando di risolvere e una volta
inizi quel comportamento se inizi
il tuo gen server mentre riceve le cose
il suo ciclo sta andando a chiamare il tuo
modulo di callback per fare il lavoro vero a
risolvi il problema che stai risolvendo
passiamo a kV come server gen
hanno ancora un modulo ogni altro
il modulo di collegamento inizia con un modulo
dichiarazione qui abbiamo questo questi sono
chiamato attributi dal modo in cui il comportamento
attributo e se sei inglese
puoi mettere au lì funziona ancora
o se ti piace fingere di essere
Inglese , non lo so, eccoci qui
dichiarare questo modulo è un callback
modulo per il server Jen quindi lo farà
ciò che il compilatore fa in questo caso è
guarda il modulo del server Jen che è
già stato compilato perché è arrivato
con la tua versione e il server Jen
modulo lo dice oh a proposito se qualcuno
si dichiara un modulo di callback
per me devono implementare seguendo
funzioni e ti dà una lista
il compilatore ottiene una lista di funzioni e se
non hai quelle funzioni nella tua
modulo allora
darti un avvertimento e dire hey se lo sei
diventerà un genere o un modulo di callback tu
dobbiamo implementare alcune funzioni che abbiamo
quella stessa API che avevamo prima di quale
è la nostra soluzione API, ma abbiamo anche
questi callback che dobbiamo supportare
e c’è un numero di loro che andrò
attraverso di loro è molto veloce, quindi c’è un
quando il vero processo del server
si avvia perché sei una sua funzione
sei una funzione in grado di creare il
stato che si desidera per questo loop e
dare al server gen che è piuttosto
molto quello che gestisce gestire come un
callback che gestisce una richiesta di risposta così
se faccio una chiamata di ricerca, ad esempio, voglio
per rispondere voglio il valore
è stato trovato con la sua chiave o eseguire il
la chiamata booleana di false handle sarebbe un modo
per farlo è come sincrono
richiesta di risposta e bassa casta che è come
ad esempio un messaggio di cancellazione unidirezionale
potrebbe essere fatto con un cast basta inviare
qualcosa dentro e dire hey cancella quella chiave
e potresti non interessarti che ci sia davvero
nessuna risposta a questo direbbe solo okay
probabilmente c’è qualcosa chiamato handle
informazioni che è immaginare che Lu riceva
tutte quelle cose che avevamo nella nostra precedente
esempio memorizza e trova quelle tuple se
ottiene il ciclo ottiene qualcosa
non sa poi andrà a
chiama la funzione di informazioni sulla maniglia e dì
hey Ho appena ricevuto questo messaggio , non lo so
che cos’è forse tu sai di cosa si tratta
un esempio di questo nella vita reale è se tu
avere un gen server che sta prendendo il TCP
messaggi del server Jenna non lo sa
TCP ma presumibilmente hai un socket
da qualche parte lì dentro e il socket ha preso un
messaggio in modo che chiami le informazioni sull’handle
chiama e dice hey c’è questo TCP
pacchetto puoi farlo girare è chiamato
quando il processo è in procinto di fermare questo è
dove puoi fare un po ‘di pulizia e poi
allenatore
è come si fanno gli aggiornamenti o downgrade così
codice codice Jayne cambia fondamentalmente cosa
succede che non ho intenzione di farlo
ma rapidamente è un po ‘il tuo processo
in esecuzione e il tipo di sistema simile
lo mette in pausa e dice che questa cosa deve
fai un aggiornamento che artiglierà il tuo
funzione di modifica del codice con lo stato che
hai al momento e ti permetti di darlo
torna qualche nuovo stato quindi se ne avessi un
stato che era come dire un record che
è un po ‘ come una struttura e tu vuoi
aggiungi un campo che potresti fare nel tuo
cambiare il codice restituendoti sai a
record diverso con quel campo aggiunto
in esso e poi una volta che ottiene il nuovo
dichiaro che ti fa ripartire e allontanarti
partire
così quei piccoli callback devi
implementare se hai intenzione di scrivere un jet
server dare un’occhiata a come lo facciamo
modo in cui avviare il server ordine del giorno in questo caso
è che abbiamo una funzione chiamata link iniziale
e tutto ciò che fa è chiamato gen server
il collegamento di inizio del collegamento di inizio è basicamente
avviare un processo e collegarlo ad esso
lo copriremo presto questa cosa locale
kb è un tupple che fondamentalmente dice a gen
server per registrare il processo che inizia
sotto questo nome kb quindi è così
registro chiamata ho mostrato in precedenza il
chiamate client kb start collegate che sono
questa funzione e semplicemente chiama questo
funzione e che restituisce ok e processo
ID proprio come prima dell’altro
cose alla fine come questa è la
modulo è chiamato anit
funzione di questo modulo questo è il
modulo di callback questo sarebbe qualsiasi
argomenti che vogliono essere passati a
ammettere che non ne abbiamo in questo caso e
allora questo è per il debug e
un server @kv di start-up abbiamo la nostra rete
funziona tutto ciò che fa è restituire il nostro stato
che è il negozio di mappe vuote è davvero
facile per il cliente perché chiama
avviso di chiamata gen server che non lo facciamo
devo passare il nostro bambino in questo caso
perché i gen server si prendono cura di questo
per noi bene passiamo ancora un paio con
Chiave KD e valore in esso per implementarlo
forniamo chiamata gestita che riceve
che si rovesciano come argomento e fondamentalmente
fa quello che ha fatto prima ma tu lo farai
avviso che ritorna un po ‘diverso
perché deve restituire un valore che è
noto al server Gen così gli uomini sono molto
si aspetta si aspetta che abbia risposto a cadere
torna a trovare simili abbiamo un caso
affermazione facendo la ricerca del mouse e
ritornare opportunamente fermato davvero
il server gen facile si ferma così tanto
è molto più semplice con gen server perché
sta facendo molto per te internals
di chiamata che abbiamo visto per il negozio e
trova funzioni la chiamata stessa gen
il server chiamato viene eseguito nel processo client
e quello che succede al suo interno è il cliente
monitora il processo stick del server a
monitorare il processo del server che è
molto economico dal modo in cui puoi farlo
molto rapidamente perché il server muore
il cliente vuole saperlo subito
il server viene utilizzato da altre cose
e potrebbe morire facilmente così tu vuoi
sapere se muore se questo invia il
richiesta a quel server lo elabora
ha un timeout in attesa di default cinque
secondi puoi cambiarlo se vuoi
e quindi presumibilmente se la risposta arriva
di ritorno da questo
quindi viene restituito al chiamante così
è abbastanza semplice, quindi i comportamenti sono gentili
di gestire un sacco di questo monitoraggio e
roba per te c’è qualcosa chiamato
il modulo SIS che è come il sistema
parla di comportamenti dietro le quinte a
fare cose come l’aggiornamento del codice
e spegni e tutto quel genere di cose
dato che di per sé è abbastanza c’è molto dentro
ma ci sono solo un paio di cose
volevo mostrarti così questo è l’Erlang
shell puoi semplicemente digitare URL e ottenere il
shell questa cosa è il prompt così numero
uno e qui sto chiamando il nostro link di partenza
funzione e torno okay ragazzino così ragazzino
è rappresentato nella shell era questo
cosa strana 0:36 zero posso quindi chiamare
systrace con quel pin è una vera volta
Io do quello al jet server che noi
iniziato qui viene rintracciato quindi se invio un
messaggio ad esso chiamando bene per
esempio trovare vai a possiamo vedere questi
i messaggi che compaiono nel guscio che
dì oh okay ho ricevuto questa chiamata
genzler o chiama l’argomento find vai a
dal 34 che siamo noi stessi vediamo
erano 34 e poi è stato inviato false a 34
e poi vedi il risultato stampato qui
falso, quindi se stai lavorando con a
comportamento così facile da attivare la traccia
come questo
e ottenere messaggi come quelli che escono e
aiutare il debug di quello che sta succedendo che è
tutto costruito in uno dei miei preferiti
quelli è qualcosa che effettivamente aggiunto alla
Erlang me stesso si sporca così se vuoi
per guardare lo stato che è nel kv
processo si può solo dire ottenere stato e
ti mostra questa è la mappa che noi
bloccato con la chiave andare a chicago in
e c’è anche qualcosa chiamato
stato sostituito che se si sta eseguendo il debug
potresti inserire una mappa completamente nuova
se vuoi provare qualche angolo strano
caso fatto sostituire lo stato pure così
quelle sono alcune cose che ho aggiunto alcune
anni fa andrà presto
attraverso applicazioni e supervisori noi
avere circa cinque minuti quindi l’applicazione
è abbastanza semplice in pratica
ti aiuta a impacchettare la tua supervisione
albero
roba che inizia lo stesso stop-start è questo
sequenza gerarchica così ha il colonnello
qualcosa ha chiamato un’applicazione
controller che sta per iniziare
ogni applicazione master e quindi il
il master inizierà la parte superiore
supervisore di livello per la tua applicazione
quel top supervisor inizierà
tutti i suoi figli ne hai fatti altri
supervisori o lavoratori così tanto
le applicazioni hanno questo aspetto
modulo qualsiasi cosa tu lo chiami qui è
immaginariamente chiamato la mia app è a
comportamento quindi è un comportamento dell’applicazione
questa volta deve esportare start e stop
la funzione di avvio chiama solo il
supervisore e lo avvia e la fermata
la funzione dice solo ok quasi tutti
applicazione che hai mai visto nel nostro
la linea sembra che potrebbe essere di più
coinvolti ci sono altre cose che puoi fare
con la maggior parte aspetto come ho detto prima
operai e supervisori
logica applicativa e supervisori
guardato la logica dell’applicazione per fare
certo che non ci sono errori in questo modo
in pratica è un po ‘ come questo tu
avere questa semplice applicazione core data
ecco il supervisore di alto livello che inizia
un altro supervisore
quelli stanno entrambi iniziando alcuni lavoratori
questa cosa è banale abbiamo visto il
banalità dell’applicazione su
lo stesso supervisore di slide precedente
implementato come un gen server è carino
il semplice a tutto il duro lavoro è fatto
quaggiù quindi questa cosa offre un bel
base per la tua applicazione anche se questi
fallire tipo di tornare qui e te
può riavviare le cose agire per gestire
gli errori ci sono un sacco di modi di
iniziare i lavoratori ma sai che potresti
avere lavoratori per esempio abbiamo iniziato a
kV e poi un gruppo di clienti che vogliamo
il kV per venire prima dei clienti
perché i clienti vogliono usare
quindi possiamo metterli in un certo ordine
e usa il resto per una strategia, quindi se
il kV muore vogliamo tutti i clienti
essere ucciso anche
puoi anche avere un one-for-one che
Dice solo che ho un sacco di lavoratori
sono una specie di indipendente se uno di
loro muoiono appena ricominciano colui che è morto
lascia solo gli altri, c’è molto
flessibilità lì e poi puoi avere
numero massimo di riavvii per periodo
questo è un escalation di un fallimento, così tu
non sederti e muoviti per sempre
cercando di riavviare qualcosa che non è mai
andando a ricominciare questo è solo un bambino
specifica che mostra come avviarsi
un bambino puoi vedere che è una mappa e
ha certi campi che devono essere
compilato così nell’originale
soluzione del server muore se il
il server muore mentre il client ha un
richiesta in sospeso o un server richiede
troppo a lungo per elaborare qualcosa come è
quel codice che codice originale se tu fossi
per tornare alle mie diapositive lo otterrò
codice originale a cui non fa niente
maneggiare una di quelle cose ancora quando tu
usa il gen server che gestisce tutto questo
roba a causa del monitoraggio del
tempo scaduto
sai il fatto che gestisce il sistema
messaggi e può trattare con questo e il
fatto che è supervisionato da un
supervisore significa che molti errori
e i problemi sono semplicemente gestiti
per te seguendo le regole grazie
quindi ci avvolgiamo in sui vantaggi di
i comportamenti stanno gestendo l’ angolo difficile
casi la capacità di guardare qualcosa
e dire oh è un gen server so cosa
che fa ogni anno un programmatore di Lang
sa cosa questi comportamenti sono quello che loro
faccio così posso guardare il codice di nessuno e
tipo di seguirlo abbastanza facilmente tutto il
casi d’angolo che ho citato ma quelli
casi angolari nascono a causa degli anni
di questa roba utilizzata nella produzione
e tipo di trovarli nel modo più duro
molto è stato testato e testato
solo un rapido controllo e tutto il genere
di roba così tanto c’è molto di più
andare TP di quello che ho mostrato me ma noi
hanno solo 50 minuti ci sono i
comportamenti ho menzionato che non l’abbiamo fatto
anche coprire le macchine a stati finiti il
roba di manipolazione di alto livello che puoi scrivere
il tuo comportamento un quadro così completo
per quella confezione e la distribuzione è quella
come un intero parlando con se stesso aggiornamenti
lo stesso affare quindi c’è molto se tu
voglio più informazioni è appena uscito
l’ultimo libro che ho scritto era su corpus 17
anni fa, questo è un po ‘diverso
è uscito in eBook
Venerdì e dovrei uscire
questa settimana penso così Francesco Cesare me
e ho scritto che
Francesco ha anche scritto un libro in precedenza
con Simon Thompson chiamato Erlang
programmazione è un grande libro da imparare
giusto e ragazzo di nome Fred hey bear
ha scritto questo bit usando Erlang e la rabbia così
lavora a Heroku e usa la sua posa
lì e ha scritto un sacco di cose
si tratta di usare Erlang e
la produzione è d’oro e poi se lo sei
in elisir si potrebbe semplicemente andare nel
sito di elisir ne hanno di grandi
imparare le risorse lì e ricordarsi di
vota questa sessione grazie
Please follow and like us: