Press "Enter" to skip to content

GOTO 2018 • Fresh Async With Kotlin • Roman Elizarov


[Musica]
lo sviluppatore dal 2000 ha lavorato molto
virus ad alto carico distribuito simultaneo
sistemi che insegno anche all’università coercitiva
sulla concorrenza che in realtà è un po ‘
Ben giù dal mio dalle cose iii
ha fatto nel mio giorno anche il lavoro di programmazione
le competizioni e il lavoro in cui lavoro
JetBrains sul linguaggio di programmazione cosmica
nel team delle biblioteche e questo è quello
ciò che parleremo oggi
quindi parleremo di un sincrono
programmazione e diamo un’occhiata a
po ‘di storia in modo da dove è venuto da così
Il catalano ha la cosa chiamata coroutine
che per molte persone sembra nuovo ma se
sei sicuro che l’intoppo sia stato
in realtà molto vecchio concetto così è
in realtà più di 15 anni concetto
è simile nel successo 7 per primo
introdotto il concetto di quarantena così
che puoi fare da un singolo programma
può fare più cose simultanee quindi
conosci le radio junior che hai
in qualche lingua moderna è in realtà
è apparso nel 75 e 77
ma le lingue che sono mainstream
ora vedi che è apparso nel 72 dire più
passare da 85 Java C sharp e Kotlin
inizialmente quando è apparso nel 2011 loro
non aveva nulla di simile al cortese
dei 15 anni intendo da tutti
queste lingue sono il paradigma prevalente
fare più pensa che fosse una minaccia
e voglio dire che una volta ho passato ad analizzare il perché
come e come è successo
sai che questa introduzione non includeva
tenda hai visto che non è stato ritenuto
necessario che conosci dai creatori di
qualche punto del tempo lo sai
multiprocessore
il sistema sembra piccolo a sudare e
tutti pensavano che le tariffe andassero bene
puoi programmare almeno con le minacce
come è successo nel tuo mainstream
sapere che c’era un linguaggio proprio come
compagnia aerea in 86 e ad esempio andare al
più recente che ha superato le minacce
insieme non hanno rivelato di sapere
al contrario le minacce agli sviluppatori
hanno esposto i processi leggeri andare a fare
qualcosa del genere che sai farti
fai applicazioni molto concorrenziali
senza lavorare con i residenti ma
non è quello che vediamo nel mainstream
le lingue possono gonfiarsi solo tu lo sai
siamo ancora in gran parte ancora molto
orientato ma che ha iniziato a cambiare in
il corso degli ultimi dieci anni così dentro
i ciò che è accaduto è accaduto microservices
sai che la gente ha iniziato a scrivere in modo
più applicazioni connesse che invece
del numero giusto scricchiolano costantemente
comunicare che è un sacco di altri
networking e che la gente ha iniziato a
rendersi conto che per scalare il
le minacce non sono sufficienti e non possono essere eseguite
queste cose massicciamente concomitanti
minacce e così con questi diritti di a
programmazione sincrona lo vediamo
tra le lingue tradizionali C sharp
Guerre in primo luogo e 2012 albero di India utilizza in
Kuwait il N consonante in diciassette anni
Willis tende sperimentali e noi solo
li ha recentemente rilasciati e quello
di cui parleremo ora e noi
anche vedere che probabilmente viene in C ++
la discussione anche nel gruppo di lavoro C ++
qualsiasi cortesi con C ++ Java è stato
versione funzionante quindi sta guadagnando interesse
come tutte le principali lingue stanno cercando
a questo e dal momento che Xu sharp era il
traduttore
tra i linguaggi di uso generale molti
lingue che tossiscono con un approccio c-sharp
ma il cotone ha preso un po ‘ diverso
percorso in realtà è più basato sul
approcci storici ci sono stati nel
nella storia e a
vedremo qual è l’approccio del cotone e
come è diverso da ciò che altro
le lingue stanno facendo un reale che vedi
quel cotone e un po ‘più vicino a come
cibo nelle lingue attuali come Perl e
può andare nel suo approccio alle proteine ​​così
iniziamo con un mais tradizionale
accordo di approccio a un sincrono
le callback tradizionali intendo in generale
linguaggi di scopo come quello è come te
sarebbe la programmazione di un codice sincrono
in JavaScript diciamo 15 anni fa
farlo e puoi ancora scoprirlo
Certo che non c’è più è, è così
diventando un’eredità ma è ancora così
approccio tradizionale a fare a
sincronia nello scopo generale
linguaggio così come lo fai tu
invece di scrivere funzioni come questa
solo che sai che richiedi un token
dal server anziché dichiarare semplicemente a
funzione che restituisce un parlare il
il problema è questa funzione che lo farà
devi aspettare e bloccare il colore fino a quando
loro parlano è così vogliamo
davvero scala e non saresti in grado di
fallo se tutto ciò che hai come un singolo
thread come in JavaScript quindi con
callback invece di restituire il risultato
si aggiunge un parametro aggiuntivo
è chiamato callback e così
riceve questo risultato quando è disponibile
in futuro, in modo che non piace con ogni
funzione che hai nel tuo codice come se
ora devi usare questo parlare con
crea un post sul tuo social
applicazione quindi qualsiasi chiamata di social network
anche tu lo trasformi in un callback di
cambiando la sua risoluzione in un parametro
funzione e poi se tu avessi questo
processo per richiedere posso creare questo
pubblicare e in qualche modo post processo allora
lo trasformi in qualcosa di simile così
invece di una semplice procedura sequenziale
ora hai questi detenuti nidificanti e
queste parentesi graffe hanno chiamato callback
diavolo e se davvero vai su Google
e Google callback inferno che troverai
come un sacco di immagini esilaranti come
mostrando schermate reali e immaginate
codice in questo stile e questo è stato gentile
di comico era
motivatore principale per tutte le alternative
approccio che sembrava fosse
davvero questo chiamato l’inferno era davvero
lo farai se tu sì google lo troverai
per lo più futures in JavaScript perché
ancora javis potrebbe essere in single threaded
non c’era altro modo di fare
cose simultanee ma in passato ma
il programma era callback quindi tutto il
immagini come in Java c-sharp
cotone puoi fare fili
non devi farlo ma comunque e
questo è il codice è in realtà semplificato
perché il vero codice è stato chiamato ma
dovrai preoccuparti di fallimenti come
quello che succede è chiamato fallire di te
devo aggiungere l’elaborazione di questo fallimento
quindi il codice sarà molto più confuso di questo
codice semplificato lo mostro su questa diapositiva
quindi la soluzione è ampiamente conosciuta
ampiamente pubblicizzato ed è anche molto vecchio
approccio è quello di utilizzare il futuro che anche
conosciute come promesse e in realtà hanno
conosciuto molto da un sacco di nomi diversi
qui dovrebbe aprire l’ articolo di Wikipedia
vedrai molti sinonimi per il futuro
promessa differita conosci Bubba Wallace
di diversi
sono stati storicamente diversi
nomi l’idea è invece di restituibile
zero per avvolgerli così invece di usare
i callback restituiamo alcuni wrapper in cima
del nostro tipo di risultato chiamalo è
chiamato futuro non importa sembra
come ogni linguaggio di programmazione deve
inventare il proprio nome per un futuro così
JavaScript lo chiama promessa
c-sharp chiama un’attività che conosci chiamate Java
il suo futuro quindi è come sembra
non sei una grande lingua straniera a meno
inventerai il tuo nome per un futuro
come se non fosse bello usare qualcuno
il nome di altro per un oggetto futuro così così dentro
JavaScript è promesso ad esempio così
l’idea è che arrivi così tardi
futuro risultante dell’oggetto che lo avvolge
ed è così che trasformi tutto il tuo
funzioni alla fine sai invece di
sei tu a scrivere questo codice di Colbeck
scrivere più come questo si applica certo
operatori da combinare
risultato in due calcoli successivi così
i callback sono ancora lì sono ancora
dietro le quinte sono solo
incapsulati e si aggiunge questa chiamata questo
su ogni fase dei tuoi multi-stage in
I calcoli di Joe, ma tu non nidifichi
più indentazione quindi non c’è questo
Cobra si farà lettera di chiusura arricciata
bretelle e tu in realtà questo è il
codice attuale che attualmente al momento
gestisce le eccezioni in modo che rende
caratteristiche così popolari che risolvono come
molti molti dei problemi della X chiamata
ma sono ancora lontani dall’essere
perfetto e che è soprattutto
notevole se li confronti per
ad esempio questo codice per il codice che hai provato
in Erlang o in oro che ti dà un
il processo leggero è fuori dalla scatola
perché sai con il futuro che hai
programmare con tutti quegli operatori
non posso semplicemente scrivere codice come te di solito
devi letteralmente imparare a
diverso modo di programmazione per scrivere a
codice sincrono con il futuro che hai
al posto del tuo controllo regolare
console è un’esecuzione credenziale
grondaie eccezionali che devi fare
impara insieme completamente diverso di
primitivi e l’insieme dei primitivi è
dipende anche dal modo in cui il suo nome dipende
la lingua o la libreria che usi per il tuo
i futures quindi questo è il genere di
la sua leggibilità dei danni e ti permette di imparare
roba nuova senza una ragione particolare
così alla fine che è quello che tende di cotone
le tende del contenuto di aiuto non sono state progettate
solo per risolvere il problema del callback
diavolo, ma anche per facilitare la programmazione
per rendere il tuo codice leggibile così con
tende di cotone invece di cambiare a
firma della tua funzione quindi è a
il tipo di risultato è diverso ora e tu
devono usare diverse combinazioni in esso
tu vivi solo in firma naturale qui
per la funzione ma la contrassegni con a
sospetto modificatore speciale e questo
modificatore di sospensione
significa che questa funzione può essere sospesa
esecuzione e questo è ciò che sono i coreani
noto per loro erano questi pochi anni
concetto che puoi avere un calcolo
ma al posto di te puoi sospendere in alcuni
puntare e continuare a lavorarci quando
qualche risultato è diventato così disponibile
ogni funzione che hai nel tuo multi
gli approcci di stato ti trasformano
allo stesso modo così invece di restituirmi
promettimelo ancora
la firma è naturale basta sospenderla
elemento modificatore e ora invece di questo
nuovo modo di voi la programmazione in realtà
programmalo nel vecchio modo in cui scrivi
il codice come lo scrivi normalmente
ma lo contrassegni semplicemente con suspend
modificatore tutto all’interno dei righi
dimena non devi imparare te
più lo stile di programmazione sei solo un
codice normale con normali concetti di controllo
conosci e la differenza è di
Certo se si programma con questo altamente
stile manuale altamente variabile con
promesse del futuro in cui hai effettivamente visto il
posti nel codice dove quelli come
punti sincroni in cui il risultato sarà
disponibile in futuro lo farai
continuare l’ uso in futuro non lo fai
non è più evidente nel codice
che è fatto in questo modo per la ragione
perché c’è un concetto diverso
non dovresti essere gettato contro di te quando tu
pensa alla tua logica di business ma tu
c’è anche un’opzione per vedere come
se apri questo codice nell’ID puoi farlo
effettivamente vedere quali sono le sospensioni
punta nel tuo codice quindi se hai bisogno di questo
informazioni è lì solo leggermente
di lato quindi non oscura il tuo
attività principale il flusso della tua attività
logica cosa succede dopo cosa e
ci sono anche funzioni bonus che vengono
con esso puoi usare i tuoi loop regolari
non devo capire cosa sia mio
futuro operativo è quello di fare un ciclo Inc
su una lista puoi usare l’eccezione regolare
urlando come se impari la lingua una volta e
quindi lo si applica in diversi scenari
puoi usare tutto l’ordine più alto
funzioni come il cotone sono molto funzionali
lingua si tratta di un sacco un sacco di questo
funzione di ordine superiore che consente al tuo
elabora liste in modo efficiente ecc. e tu
può usarli tutti senza imparare nuovi
funzioni per la tua promessa
puoi scrivere il tuo ordine superiore
funziona come se avessi bisogno di riprovare
operazione un certo numero di volte con alcuni
esponenziale chiamano per somme come questa
basta scrivere come si scriverebbe
regolarmente e poi scrivi il tuo massimo
funzione di alto ordine usarlo così tutto
funziona con concomitante solo in peggio in a
codice normale non c’è un nuovo stile per
impara ma solo un modificatore di sospensione così
ascoltiamo rapidamente perché quando
quando mostri persone che non l’hanno visto
la prima volta dirà la magia e c’è
niente di buono sui principali software
lo sviluppo come la magia è qualcosa di te
aperto non mescolare bene in modo da avere a
capire almeno a un certo livello come
lavori
così quando il compilatore del contenuto vede una funzione
è contrassegnato con qualsiasi modificatore di sospensione
catturato il mio gira su GBM così in realtà lo farei
dietro a questa cosa viene compilato
sette dichiarazioni GBM in cui GBM
stesso non ha un concetto di
sospeso per dal momento che le chiamate in concetto
non è un concetto di GBM, quindi quando compila
in realtà è composto per funzionare con
un parametro aggiuntivo e questo
parametro condizionale ha un tipo che
chiamato continuazione ma in realtà
tu riconosceresti che è solo una richiamata
il programma è stato richiamato, quindi se si va a
tossire libreria standard e vedere cosa
la continuazione è che vedrai in questo
la continuazione è solo un vero e proprio callback
l’interfaccia è che non c’è molto dentro
ne sai che ha un contesto che
definisce dove la roba a firmando e
fornisce informazioni aggiuntive e
ha una funzione di callback per riprenderla
calcolo con un certo risultato dove
il risultato può essere il loro successo o fallimento
questo è tutto non c’è niente di più callback
e l’iniziazione è in realtà la stessa cosa
cosa e quando senti qualcuno dice
sai che stiamo continuando
stile di passaggio
blah blah blah è solo un molto
nome glorificato per i callback dei programmatori
ora come si anima si integra nel
ecosistema del linguaggio convenzionale del cotone
traducono il sistema della Mecca GBA
in particolare in TV intendo caldo così
succede che c’è uno zoo di quei futures
le biblioteche che sono storiche non sono cosa
Java è tornato là fuori nel 95 ha fatto
non ha alcun servizio per non farlo
avere un tipo futuro e il reale
tipo futuro che puoi usare
programmazione sincrona che si chiama
il futuro del computer completamente disabilitato
futuro è apparso fino ad un membro di Jelle
5 che da qualche parte nell’Io
ricorda quale era l’ anno ma ma
comunque è già da quel momento lì
c’erano molte librerie in competizione e se
guardi qualsiasi dimensione ragionevolmente
pezzo di software aziendale che farai
sicuramente trovare così tanti propri tipi futuri
nascosto da qualche parte all’interno è di nuovo il
Il sistema creatore GBA a questo riguardo è
davvero brutto
come se non fosse come ad esempio dotnet
è più standard c’è di più
siti futuri standard ma in Java lì
è uno zoo quindi dovresti anche affrontarti
spesso di fronte a questa situazione hai questo
per esempio c’è una libreria chiamata
retrofit ora che è abbastanza popolare su
il mondo dell’ingegneria in un retrofit che puoi
chiama sai che puoi chiamare remoto
servizi a riposo facilmente solo un po ‘
un’interfaccia divertente con corrispondente
funzione ma hai ragione Arif ha
il suo tipo futuro è questo tipo futuro
chiamata così è quando lo vedi
funzione lo riconosci rapidamente
guglia sai che studiamo per il risultato noi
restituirà alcuni rapper ai migliori referrer
che rappresenta il risultato nella
il futuro è che è una promessa o
un futuro quindi come lo integriamo
chiamare il coyote in modo così cugino
quarantena con cui stiamo lavorando
sospendendo le funzioni che hanno il
sospendi il modificatore, quindi proviamo solo ad adattarci
la nostra funzione che stai per viaggio
la chiamata restituisce solo l’oggetto risultato
in questo caso è passato e da
convenzione cosa facciamo per lo zoo o
tipi futuri definiamo un’estensione
la funzione ha chiamato i pesi
convenzione usiamo non è
tutto ciò che avrebbero sospeso il
esecuzione di questo il coraggio nel chiamare
questa funzione fino a quando il risultato è
disponibile ma come scriviamo in questo modo
lo so a colori quindi ovviamente è un
funzione che ha sospeso se io
dichiarato come estensione sulla nostra chiamata ma
cosa sta succedendo dentro l’unico modo per un
esecuzione sincrona nella maggior parte dei
le librerie del genere sono effettivamente basate
sui callback è il callback il più
approccio primitivo a un programma più semplice
se si guarda questa chiamata per esempio
troverai una coda come metodo
installa una callback in ogni singolo
i futuri tipi che troverai ovunque
qualche metodo può essere chiamato all’ascoltatore
sai qualcosa questo che installa a
copia ma istantaneamente Kovac non è abbastanza
perché se scriviamo il corpo di questo
funzione qui ti sto ancora richiamando
non farei nulla per il colore solo
sai che la funzione ritorna ma noi
bisogno di vero in qualche modo restituire il risultato da esso
abbiamo in qualche modo bisogno di sospendere
esecuzione della tenda fino alla chiamata
ritorni di fiamma e questo è dove uno speciale
funzione di libreria chiamata sospendere la cura
le routine vengono da così che è sospendere
la tenda è un fatto speciale
funzione nello standard della tosse
libreria che è ciò che effettivamente fa a
trucco di sospendere l’esecuzione fino ad alcuni
evento accade diamo un’occhiata a questo
questa è una firma di sospendere la tenda così
sospendi la tenda vedi che è definita come
sospendendo la funzione ma vedi che ci vuole
all’interno di un tipo funzionale che è regolare
non è contrassegnato con sospendere lo siamo
solo un normale blocco di codice che prende
continuazione quindi se efficacemente cosa
sospetto tenda ci vuole cosa
succede dopo che ha rivisto questo in questo
contenitore oggetto e passa a
parametro per questo blocco e questo concetto
che dovrebbe davvero davvero vecchio così dentro
fare per esempio è da una lingua
chiamato schema questa funzione è stata chiamata
chiama slash cc-cold con corrente continua
in realtà siamo stati in questo concetto dal
schema in Kotlin una vera e propria iniziale
prototipo l’abbiamo chiamato sai chiamare
con considerazione corrente ma poi tu
sappi che dopo l’agenzia futura lo nominiamo
sospendere il co-routine per renderlo più
comprensibile quello che effettivamente fa ma
non commettere errori è fondamentalmente
questo è quello che chiama CC, non lo abbiamo progettato
indietro nel tempo così ora quando il
invocando la tenda di sospensione si può ottenere
continuazione e la tenda che non era
questa funzione è ora sospesa
quindi ora puoi installare un callback e
quando riceve il fuoco di ritorno
rispondere è possibile analizzare e si può
o riprendere questa continuazione con il
successo che c’è un hindi
estensione chiamata resume o è possibile
riprenderlo con eccezione e non dire il
sai che questo è fallito e solo quando
riprendi il contagio poi l’esecuzione
del processo che hai avuto
continuo che questo è tutto ciò che è di base
tutto il codice necessario per scrivere
integrare alcune future librerie con
codici di cotone no no quel tipo di riduce
l’intero zoo del futuro devi avere a
tipo di concetto semplice di cartoni animati
quando così, ma questo è solo un lato di
integrazione dall’altra parte di
integrazione come effettivamente li costruisci
tende così come si avvia il tuo a
processi sincroni quando ho mostrato
questa diapositiva con questo semplice esempio
inizialmente ho detto tutto quello che dovete fare è
aggiungere una lente di ingrandimento suspense se ho un
processo multi-stadio che sta invocando
alcune di funzioni sincrone ma se
Lo rimuovo qualunque cosa tu faccia in questo modo
cosa succede se voglio solo fare qualcosa solo
leggi la funzione regolare e inizia a farlo
cose che richiedono molto tempo
faccio richieste di rete da cui ottengo un errore
compilatore e dice che tu lo sai
questa è una richiesta di sospendere la funzione
e posso solo chiamarlo da un altro
funzione di sospensione
eh cosa significa che vedi se tu
pensarci ha delle funzioni sensate
contrassegnati con sospensione minificata hanno
questo super potere che possono sospendere
esecuzione del chiamante per un lungo periodo
quale funzione normale non posso dire il tuo
la funzione normale può semplicemente bloccare il
chiamante che blocca completamente il poker
thread ma non possono farlo come in a
modo sincrono senza ma bloccante
chiunque tranne la funzione di sospensione può loro
avere questo super potere in maniera regolare
funzioni che non fanno nel nostro normale
lingue regolari del mondo per la programmazione
non hanno questo super potere così e
quindi non possono invocare nulla per quello
sospendendo quindi cosa facciamo non possiamo
semplicemente invochiamo una funzione sospesa
bisogno di trovare qualche soluzione e il
parola corrente in questo abbiamo una famiglia
funzione chiamata costruttori di tende e il
il più primitivo di loro è lanciato è
chiamato pranzo perché è usato per
puoi pensare a Kuragin ignara e dimentica
più o meno come un inizio che infili il tuo
trovare un nuovo processo che puoi pensare
di un processo molto leggero nel tuo
programma che inizia a fare qualcosa
completamente in concomitanza con il resto di
il tuo codice e lo fa una volta su qualsiasi
il resto di voi potrebbe semplicemente continuare a fare un
cosa usiamo lanciare quando siamo interessati
per esempio negli effetti collaterali di alcuni codici
questo caso siamo interessati che vogliamo
Succhi una richiesta di rete per ottenere qualcosa
il nostro back-end quindi lanceremo a
processo concorrente per farlo per noi il
il lancio stesso ritorna immediatamente come
questa è una funzione regolare che non blocca
qualsiasi cosa così il nostro articolo di posta funzione solo
ritorna immediatamente dopo aver iniziato questo
processo del programma in un thread in background
sondaggio ma questo significa che se ne facciamo
elaborazione post qui significa che la
anche il processo postale sta per accadere
pool di set di sovvenzioni di esempio per cui è OK
applicazioni lato server ma potrebbe non esserlo
una chiave per le applicazioni di interfaccia utente perché lui
più applicazioni di interfaccia utente di solito limitate
lavorare con te UI dal
il thread dell’interfaccia utente principale è così
funziona in Android su come funziona
tutti i principali che hai quadri
c’è così così che cosa se dopo aver fatto questo io
desidera aggiornare qualcosa su di te II può
fallo da qui
perché funziona in background
il thread e l’ uso corrente mi danno molto facile
soluzione che posso appena quando ho lanciato in
incoraggiare e posso specificare il dispatcher
per esso e i controlli del dispatcher è a
un po ‘di contesto di codifica che controlla la parola
eseguire e posso dire per favore eseguire su
il mio thread principale e questo è l’unico
cambiare ho bisogno di fare per assicurarsi che
tutto all’interno delle parentesi graffe diventa
eseguito sul mio thread principale dove posso
vai e ti tocchi in sicurezza io e vedo
perché è tutto basato sulla sospensione
funzioni e sospendendo le funzioni in profondità
all’interno di un basato sui callback che conosci
la mia principale minaccia non è effettivamente bloccata
quindi ricevo più attività simultanee
in esecuzione nel thread principale con just
solo una semplice invocazione cosa cosa
rende il lancio così magico se te lo dicessi
che non posso semplicemente invocare la sospensione
funzione ma lancia in qualche modo lo fa il
lancio di per sé una funzione regolare E ‘
firma semplificata mostrata qui perché
è una serata molto lunga svegliata da
ovunque ma accetta come blocco non a
semplice tipo funzionale ma è dentro
tipo collisionale Marcus sospende la metafora
così dentro il blocco che io do
il lancio dice un lambda che è
parametro per il pranzo posso posso effettivamente
usa la funzione spin così è così
funziona come adattatore tra una sospensione
mondo nel mondo normale in un altro modo così
mi permette di essere chiamato da regolare
funzioni ma posso usarne altrettante
funzioni al suo interno è ciò che fa il lancio
e il lancio anche in realtà non solo il primo
e dimentica che è una vera fiducia in me
al processo ho appena abbiamo creato appena in
il continente parla di lavoro
e questo mi consente di annullare il controllo
il suo stato se ho bisogno di non devo
ma ma posso tenerlo se io se io
voglio ora si pensi che ti ho promesso
all’inizio diamo un’occhiata a
l’ asynch lo attendo lo chiamo classico
approccio al programma segreti perché questo
questo è se guardi la storia e
tra le lingue tradizionali C sharp
fu il primo a integrare un sincrono
facilità nella lingua e
hanno introdotto questo un singolo peso
coppia ed è tipo di cattura su come
molte altre lingue hanno seguito questo
così vediamo come funziona lì
quindi in cotone vorrei scrivere un codice come
questo l’abbiamo visto più volte finora
se scrivo questo in codice in C sharp il
alla fine avrai notato alcune differenze
vediamo cosa sembra molto simile ma
ci sono differenze importanti andiamo
contalieli così è anche quello
solo C sharp è un dattiloscritto in Dart
questo approccio si sta integrando
in JavaScript come se fosse come C
gli sharps impostano la tendenza qui, quindi la prima
differenza è evidente sintassi a
differenza invece del modificatore di sospensione
usano un lavandino che è solo diverso
le parole vanno bene e noi l’altro
la differenza è che in questo approccio piace
tutti i miei punti in cui sospendo
il nostro esplicito devo usare un peso
parola chiave e l’altra differenza c’è
non così ovvio ma molto molto importante
come vedremo più avanti è che ogni volta che a
funzione distinta non è di tornare
il risultato originale ricerca solo futuro
in c-sharp questa chiamata al compito e questo è
in realtà non le cose sintattiche come a
pesi in un lavandino, ma questo è il fatto
che queste funzioni restituiscono un futuro
quello che loro realmente che cosa
in realtà fa la differenza, quindi non lo facciamo
avere una parola chiave di peso in comune e alcuni
la gente chiedere perché non l’abbiamo
piace su questa parola chiave ma non è il
problema con il peso perché non lo facciamo
è in realtà l’intero problema
con un lavandino si avvicina alla ragione per cui abbiamo fatto un
modo diverso in cotone e vedi se
tu guardi C sharp e hai una sincronizzazione
funzione C sharp per esempio richiesta
token che è un’espressione valida e in C
sharp o JavaScript uno script di tipo e
produce il tuo futuro così la domanda può
i sé erano trans immediatamente in concomitanza
inizia questo processo sai se
chiedendo ok gli elettori del futuro e
quando indossi un segnalino richiesta peso
è anche un’espressione valida il suo tipo è
un token lo è e se li confronti
due che vuoi è che il primo sia
Concorrente sto scrivendo su token e
Ora ho due processi simultanei
lavorare nel mio unico sistema sta lavorando
parlando agli altri continua l’ esecuzione
e la seconda è sequenziale
comportamento quando scrivo un modo per richiedere
parlare e non c’è concorrenza è tutto
succede in sequenziale qualsiasi lingua come
Do diesis e tutte le altre immagini che
copia questo approccio questo simultaneo
comportamento predefinito come quello è quello
quello che ottieni per impostazione predefinita a meno che tu
ottenere esplicitamente una ricerca
comportamento utilizzando una parola chiave e noi
credo che un certo approccio crediamo
che dura concorrenza per gli sviluppatori è
soggetto a errori e deve essere esplicito
così in Kotlin è stata progettata la funzione sospesa
in modo che imitino in sequenza
comportamento di default nella sequenza di cotone
comportamenti che tengono e devi optare
in in concorrenza quando ne avete bisogno
vedremo come succede così cotone
l’approccio a una cosa è leggermente
diverso è altrettanto potente
è appena impostato come predefinito
vediamo perché avevamo bisogno di vedere un reale
usare bene il caso è difficile da discutere
assolutamente vediamo qual è il reale
utilizzare il caso per async stile c-sharp
funziona cosa c-sharp perché hai bisogno
a volte davvero bisogno di questo Congrats
quindi prendiamo questo esempio. Ho un
funzione
quello sta leggendo un grippaggio là è a
funzione di sequenza Futuro del New Jersey e
carica in modo sincronizzato un’immagine e quando
e poi cosa non posso fare in c-sharp I
posso scrivere questo tipo di codice che posso vedere
carichiamo prima immagine e simultaneamente
la più bassa o la seconda immagine e poi io
può andare bene, aspetta il primo
immagine e aspetto il secondo e
mentre sto scrivendo il codice come questo, sono sincero
ottenere la concorrenza e questa è la chiave d’ uso
stiamo in realtà vogliamo questo spettacolo confront
vuoi che le mie due immagini si gonfino
contemporaneamente per accelerare le cose
perché più tardi vogliono combinarli
in qualche modo processo, ma io non voglio
sequenziale uno dopo l’altro che voglio
concurrency e c-sharp conosci l’essere
le valute di lavoro predefinite mi lascia fare
questo così come lo fanno in cotone I
può anche scrivere una funzione di sincronizzazione in Kelvin
le differenze sono che invece di
scrivendo una sincronizzazione a sinistra la scrivo come
una funzione regolare e restituisce il
futuro di nuovo essere una lingua che ho
diventare un grande giocatore che dovevamo inventare
il nostro nome per il futuro, quindi abbiamo aperto
Wikipedia ha trovato un elenco di sinonimi per
futuro trovato differito quindi non viene utilizzato
ancora in grave mia sorella così grande volontà
lo prendiamo così è il nostro tipo futuro
chiamato differita e leggiamo penso su
il diritto va bene così come visto nel codling
il mondo è solo questo costruttore di cartoni animati che
prende una porzione di codice si trasforma in
futuro voglio dire, fondamentalmente tu puoi
fai lo stesso come vedi le tue parole acute
puoi scrivere solo quelle funzioni di glassatura
dal momento che è leggermente diverso e puoi farlo
usali come hai fatto in c-sharp
puoi iniziare più versioni
contemporaneamente utilizzando la funzione di sincronizzazione
perché ora funzionano regolarmente
ritorna immediatamente e semplicemente darti un
gestire se si dovrebbe promettere di ottenere questo
risultato e quindi puoi aspettarli per loro
ancora una volta la differenza è solo sintattica
con il peso del codice c-sharp non è un
estensione non è una parola chiave in
le lingue di funzione su questo differiscono questo
ti fa aspettare il suo risultato ma se tu
guarda attentamente questo codice
noti un problema qui in realtà
ha iniziato brutto problema cosa succede se questa attesa
si blocca cosa succede se si carica la prima immagine
fallisce qualche errore di rete qualcosa di questo
semplicemente non completa e getta
l’eccezione non può caricare la prima immagine
ora questo era il modo in cui erano molto definiti
in catalano e in tutto il futuro basato
in c-sharp e tutta la sinc attende
le lingue sono le eccezioni
questo caso e l’intera procedura
abbiamo sullo schermo le parole ma ora
questa seconda futuro lascia solo è
ancora premio nella seconda immagine in
sfondo solo nessuno che passa
questo risultato più perché non siamo
arrivando ad un secondo una zona umida mai adesso
abbiamo questo grande processo di esecuzione che è
occupando risorse facendo un po ‘di lavoro e
possiamo mettere un sacco di riferimenti ad esso ora
proviamo le immagini di tutto il mondo
incorporazione e fallisce sul suo primo
immagine di nuovo abbiamo un’altra perdita di legge
nella seconda immagine e proviamo a farlo anche noi
Presto esaurirò le risorse e
succede come in tutto il posto
codice vero e proprio persone persone giuste
solo non notarlo perché succede
solo così raramente e occasionalmente quando
c’è qualcosa non funziona proprio
esattamente giusto e questo è vero
problema quindi il modo in cui lo risolviamo nel cotone
è basato su poche cose che è la prima cosa
quello che noi Adam attico stile di scrivere questo
roba di cotone è scrivendo a
sospendendo la funzione quindi cosa diciamo
le persone non scrivono una singola funzione
non scrivere funzioni lì per tornare
Futures perché sono soggetti a errori
non lo fai scrivere funzioni con speso
modificatore sono sequenziali cosa fai
pensate che ci saranno meno soggetti a errori
vediamo perché sì, se ho bisogno di concorrenza posso
fare concorrenza proprio dove mi serviva così io
quando voglio fare qualcosa in concomitanza
prima di tutto uso un concetto di
strutturata concomitante delimitare il
portata di Michael Garcia tutto bene
questa cosa è cugina si chiama tenda
portata appena scrivo qualche blocco di
codice per esplicita l ecco che sto facendo un po ‘
cose attuali e all’interno di questo blog
non può semplicemente usare SC come un livello superiore
funzione e diventa concurrence ora
diventa esplicito, leggo in modo sincrono
Signore, prima immagine e l’occhio destro vede
molto seconda immagine e mi ha restituito
trasmetterebbe quei futuri e poi
Posso aspettarli e processarli
più tardi, quindi, il cotone si avvicina a pensare, facciamolo
analizzare la differenza
la prima differenza nell’approccio dei contenuti
e la sincronizzazione contro C sharp è quella in
cotone se seguo :
in un approccio magico di sospeso
è solo la funzione che sta invocando il token di richiesta
un’espressione valida e mi produce a
risultato e c’è anche un altro modo per
invocalo per dire a un token di richiesta di sincronizzazione che è
anche espressione valida e mi produce
in futuro e il primo corrisponde
ad un sequenziale il comportamento e il
secondo uno concorrente e il primo
più corto è e di default quindi segnala il
il comportamento è predefinito e simultaneo
cosa si sceglie se è necessario, ma anche
approccio al cotone è diverso nel
altre cose perché ti costringe a
aggiungila alla struttura differenziale
la concorrenza vedere quando si scrive questo codice
in questo modo sei costretto a scrivere questo
codice nel costrutto scope in quanto una sincronizzazione
è definita la funzione di estensione encouragin
scope object puoi semplicemente scrivere un sink
dal nulla vedrai prima
Esempio Devo dire globale ambito un
affondare devi dire esplicitamente cosa è
lo scopo che stai facendo il tuo concorrente
cose dentro e perché è utile vediamo
Che succede qui
ora se ora si sta caricando per la seconda immagine
si blocca solo abbiamo avuto il problema prima
con il futuro perché questo è sink
iniziato in questa corrente in ambito va
e cancella questo coraggio in ambito e da
cancellandolo, inoltre, annulla attentamente tutti
altre attività concorrenti che abbiamo lanciato
in questo ambito quindi ora tutto questo
elaborare i tuoi premi in modo pulito senza
perdite di attività concorrenti e
lasciandoli dietro di voi sa che è un
cambio di gioco che ti consente non solo
scrivere software che utilizza la concorrenza
dove ne hai bisogno ma è anche come te
fai senza rischiare di perdere il tuo
processi concorrenti e perdite
risorse quindi la chiave da asporto qui è
interferire e sospendere le funzioni potrebbe essere
concomitante se ne hanno bisogno ma non lo fanno
trapelare non lasciano alcuna pratica
dietro con esso dove sono ricaricati
ci siamo costretti a forzare la concorrenza
strutturato e l’unica cosa importante
notare che c’è quando le persone spesso
confondono la concorrenza e il parallelismo
sai che lo vedrai ovunque ma
come faccio thread blah blah blah e
colonna basata sull’impiego di Shiv da
supporta il parallelismo che puoi avere
più thread ma e fare cose dentro
parallelo ma questo prisma è completamente
opzionale come il parallelismo
come tutti i dettagli di implementazione di livello di
il codice come come si pianifica che tra
filo che non è quello che dovresti essere
pensando in anticipo quando progetti il ​​tuo
software così quando progetti il ​​tuo sorter
dovresti pensare alla concorrenza
come come decomponi il tuo grande compito
in processi concomitanti che interagiscono
l’ uno con l’ altro e il realismo che è
questo dettaglio di implementazione e in cugino
tende puoi avere centinaia di migliaia
di processi concorrenti tutta la corsa
lo stesso thread hai il tuo thread principale
questo fa tutta l’interfaccia utente e tu hai
rete concorrente di animazioni concorrenti
richiede che tutto funzioni nello stesso thread
e puoi usare dimostra ilysm ma è così
come la preoccupazione opzionale che puoi mettere
quei dispatcher e tu sai specificare
li solo in posti dove hai bisogno di perla
è e dove li vuoi CPU pesante
calcolo da scaricare su
un altro thread per essere parallelo con il
il resto del tuo lavoro lo puoi fare ma è così
facoltativo non sei obbligato ad essere
parallelamente alla causa, incoraggia a farlo
aspetto opzionale
e ciò che è importante e anche questo dà
tu una risposta perché non li abbiamo chiamati
modificatore wise call suspend o sync
come se fossimo tre diversi aspettare e noi
sai perché ma come avremmo potuto chiamare
la parola chiave suspend e una parola chiave sing
pensa a loro ma no non l’abbiamo fatto perché
sospendendo le funzioni nel cotone che fanno
modo più che consentire un sincrono
programmazione in realtà la lingua
meccanismo per supportare il codice sincrono su
allo stesso tempo usando lo stesso meccanismo
quindi diamo un’occhiata a questo esempio noi
voglio definire una sequenza di Fibonacci
numero come un pezzo di codice e
Curva del Wisconsin dal momento che è facile da fare
usiamo solo questa tenda di sequenza
costruttore e quindi possiamo dirvi per prima cosa
dieci minuti di numeri e copertura per
elenca e ottieni un elenco dei primi dieci
Numeri di Fibonacci e ne vale la pena
sullo stesso concetto è come la sequenza
è anche costruttore di tende è solo un
differenza con i costruttori di tende regolari
che è limitato nel senso che tu
non posso fare molto dentro ma solo
fornire valori al colore e al
operazione di questo la differenza tra
quelle tende incoraggiano che vediamo prima
fa il sipario qui è completamente
sincrono non c’è solo io penso
qualunque cosa qui l’operazione di questo
la tenda per la sequenza è completamente
sincrono con il resto della
codice cosa vuol dire se prendo il mio
Sicurezza di sequenza di Fibonacci e iteratore
niente succede niente di codice da
all’interno della sequenza di Fibonacci vuole quando
quando richiedo un numero successivo da esso
è qui che inizia questo codice per eseguirlo
supera la sua logica ne inizializza alcuni
variabile e produce il primo valore e
questo posto sai che il controllo torna indietro
al colore completamente sincrono modo
Sincronizzazione di Noè
quindi se richiedo il prossimo articolo della Malesia
sequenza quindi riprende lo sai
completa il resto della logica che conosci
confondere il prossimo bene il tuo Fibonacci
sequenza e ritorna completamente
sincrono non c’è, penso solo qui
ed è per questo che sai che è solo uno
del motivo per cui non potremmo avere
ti ha chiamato sai questa cura questa cosa
quello semplicemente mi sembrava sbagliato qui così comunque
quando inizi a programmare con più
collegi non importa se il
sequenza s ti va alla fine
ti imbatti in questo problema di condivisione
stato e cosa intendi per condivisione
invece tu sai nella vita reale che abbiamo
alcune entità nelle nostre applicazioni
avere uno stato e applichiamo molto
operazioni a loro e lo stato ha bisogno
di solito nuova sincronizzazione se seguiamo
approccio tradizionale di multi-threading
sai che iniziamo a preoccuparci delle serrature
sui monitor ecc. che diventano disordinati e
questo è un buon esempio di che tipo di
i problemi hanno condiviso lo stato mutevole
applicazione reale come se si dimentica
sincronizzare qualcosa di simile
ora ottieni questo tipo di comportamento
tu puoi farlo puoi piacerti lo sai
trascorrere giorni cercando di risolvere i loro
crash misteriose le applicazioni che è
è una buona promessa
lista di stati condivisi ma ce n’era una
la soluzione è di nuovo molto vecchia
è stato inventato in Anthony per like
come anni fa
si chiama CSP che comunica sequenziale
processi l’idea è quella di usare
bellissimo stato noi non lo facciamo noi
non condividiamo lo stato mutevole invece di noi
comunicare e darti solo perché io
significa che non si tratta di una presentazione
questo ma solo darti un’idea di come
funziona il taglio incoraggia
quindi Colin Curtis possiamo invece questo
sequenza sequenza preziosa possiamo anche
crea questo simultaneo per gestire il
SEQUENZA si può semplicemente cambiare un costruttore
per costruire prodotti chiamati
e produrre è un sincrono
costruttore che lancia una rete di tende
semplice collegato a terra in modo sincrono
e questo comunica con il resto di
il mondo sulla comunicazione primitiva
chiamato il canale quindi se da dentro di te
può inviare valori a questo canale e da
fuori sai che possiamo dirigere un’altra macchina
routine dal nostro thread principale possiamo dire
Voglio questa tenda principale che solo
blocca il thread principale e posso ricevere
da questo canale mi piace così
incapsulare il mio stato all’interno di un sequenziale
pezzo di codice che è dove questa equazione
viene da CSP ma lasciali
comunicare attraverso i canali e questo
apre uno stile completamente diverso di
programmare dove invece di condividere
stato mutabile condividiamo le informazioni con
comunicare e di nuovo c’è
ha anche accumulato conoscenza di come
programma sullo stato molti altri
lingue supportate e questo è ancora
un altro motivo, ad esempio, perché non noi
avere una parola chiave di peso perché è solo
sembra brutto quando inizi a scrivere dice
PS molto più facile avere questo bello
Ricezione agiata e altre funzioni
così tutto funziona proprio come
prima ma ora è un sincrono ora noi
avere un canale un canale synchros quello
lascia che le correnti facciano addirittura una differenza
comunica per chiuderlo fammi ricapitolare
alcune scelte non tradizionali quel cotone
fatto con origini soggettive prima di
tutto se si guarda all’approccio classico come
nei pitoni diciamo per esempio un esempio
è il linguaggio che fa per fare carbonio
squadre hanno perdita di parole chiave un sacco di
nuovo concetto Penso che i radiali di origine
molte parole chiave diverse in cotone
questo è solo un modificatore di sospensione che
fa tutto questo intendo solo uno
aggiunta effettiva alla lingua che abbiamo fatto
abbiamo aggiunto il supporto per la sospensione
funzioni e in cotone in realtà il
la libreria standard è uno standard molto sottile
il cotone bibliotecario fornisce pochissime basi
primitivo
sospendi la tenda che ti permette di
integrare con tutte le altre librerie
hai in tutto il resto come corrente
supporto per i team builder per i futures ecc
lascia in una libreria separata che è
open source che puoi colpire
otto puoi prendere come è stato implementato
cosa puoi realizzare?
migliorare le tue cose in cima
questa piccola libreria di base di
primitivi e se vuoi saperne di più
il posto migliore per imparare basta andare
sito ufficiale cotone terra Rete così
abbiamo appena rilasciato cotone 1.30
e tende stabilizzate ora è stabile
supporta la funzionalità di cotone ed è
ora disponibile sul sito web in
la sezione di apprendimento ci sono molti
documentazione che sai che puoi leggere
per imparare tutorial ecc eccetera
quindi dai un’occhiata c’è molto attivo
comunità che comunica su di te
conosci la discussione andando dove puoi chiedere
domande grazie mille
tu

Please follow and like us: