Introducere în paradigma programării asincrone

Limbi asincrone Limbi asincrone

Limbile de programare asincrone se bazează pe Apeluri care pot fi îndeplinite acum sau în viitor. Adică variabilele pot fi completate sau atribuite în orice moment al executării programului.

Multe dintre limbile populare de programare se bazează pe procese sincrone. Adică, o comandă poate fi executată numai după executarea cea precedentă. Acest lucru este foarte benefic pentru programator, pentru că nu trebuie să vă faceți griji când datele vor fi gata. Problema acestor tipuri de limbi este că procesele ocupă mai multă memorie și sunt mai puțin eficiente.

Exemple

Un exemplu al acestei paradigme este PHP, o limbă sincronă. Când un utilizator încearcă să acceseze un fișier PHP cu ajutorul unui browser web, se numește un subproces Apache2 (care este responsabil pentru manipularea tuturor apelurilor către fișierele web și suportând PHP). Subprocesul nu este închis până când codul nu se termină. Acest lucru înseamnă că, dacă fișierul dvs. are un pic de funcționare și mii de oameni încearcă să acceseze același fișier, se ajunge la un punct în care mai mulți utilizatori nu pot fi furnizați din cauza eșecului resurselor.

Alte ușor Exemplul de apreciere este cel al unui „buton”. Dacă vom lega un buton la un știft digital al unui microcontroler și încercăm să citim, avem două posibilități:

  • citiți-l continuu până când modificați starea
  • Utilizați întreruperile

Primul este puțin folosit (cu excepția cazului în care este într-adevăr necesar) deoarece este ineficient. Utilizarea fiecărui ciclu de captare și analiză a datelor pentru starea butonului consumă mult mai frecventă decât lăsarea dispozitivului în așteptare și utilizare a întreruperilor.

Ați putea spune că întreruperile în microcontrolere sunt un exemplu de apeluri asincrone. Problema acestora este că acestea au întrerupt executarea codului curent pentru a apela rutina de întrerupere. Din acest motiv, rutinele trebuie să fie cât mai scurte.

Avantaje și dezavantaje

Limbi sincrone

  • ușor de citit și de înțeles
  • ușor de depanat.
  • nu vă faceți griji cu privire la disponibilitatea datelor.

Limbi asincrone

  • Debug dvs. nu este atât de simplu. Un cod se poate compila corect și poate să nu funcționeze așa cum credem noi. S-ar putea să avem o funcție care depinde de o altă alergare când nu ne-am gândit la asta.
  • Excelent pentru managementul interfeței.
  • Ai putea spune că sunt mai greu de „înțeles”, Deoarece este o altă paradigmă de programare.

Există diferite infrastructuri (cadre) care permit mai multe limbi (Python, Java, PHP, printre altele) să devină „limbi asincrone”. Analiza fiecărui cadru depășește mult obiectivele acestei publicații.

comparații între paradigme

pentru aceasta vom folosi o limbă simplă pentru a înțelege ca PHP pentru a analiza limbile sincrone și nodejs (acesta din urmă este un cadru JavaScript) pentru limbi asincrone.

divid id = „7c2b0535CE”>

php

Php

iv id = „

div id id = „32C2FD1522” div> 2 div>

3
4
7
9
10
10
11
14
18
18
18
19
21
26
26
27
27

Div>

28
29
30
31
33
37
37

|

39
43
45
45
47
49

iv id = „08ef788246”

modul. Exporturi = funcția (aplicație) {
var async = necesită („async”);
var fn = necesită (‘./ funcții.js’);
app.get (‘/’, (req, res) = > {
Var utilizator, date, meniu, antet, Corp, subsol;
async.series (,
(err) = > {
variabile variabile = {Antet: antet, corp: corp, subsol: footer};
req.render (exemplu.EJ-uri, variabile);
});
});
}

IV ID = „473FA0056E”

php

1
2
3
4
5
7
9
10
10
11
13
15

15

div id = „04967DFE33” PHP
includ (‘conexion_base_datos.php’);
includ (‘funciones.php’);
$ usuario = cargardatosusuario (sesiune de $ _);
$ date = cargartartosbasedatos ($ usuario);
$ meniul = cargartarditosdelmenu ($ usuario);
$ antet = cargarheader ();
$ corp = cargarcuerpo ($ date, $ meniuri, $ usuario);
$ subsol = cargarfooter ($ meniuri, $ usuario);
crearpagina ($ antet, $ corp, $ subsol);
8De8ac001d „>

div id =” 87b18c494f ” b6978a1ff7 „>

compatión de códigos. A la Izquierda JavaScript Y A La Derecha Phpambos Códigos Resolver El Mismo Problema: Mostrar UNA Página Web en Donde SE Requiera Cargar Información Del Usuario. ES NECESARIO Cargar Información de UNA Baza de Datori (de Cualquier Cosa, Ya Sea Productos, inventario etc.), Cargar La Cabecera de la Página, El Cuerpo Y El Pie de Página Y Redizar La Misma. SE HAN EVIADO LAS COMPROONIONES DE ERRORI PARACHER El Código Más Corto Y Sencillo de Enternder.

Como Podemos Apreciar, Php Es Marele Más Fácil de Leer. SAbemos Que Todas Las Funcions Que Estamos Lamado Estanto de dentro de un Arhivo de Funciones Lamado „Funciones.php”, Y que CADA FUNCIÓN SE VA A ejutar justo después ol se ejecute la anterior.

JavaScript

EN El Ejemplo de JavaScript, SE Utilizó Una Librería o Módulo Lamado „Async”. Este permițuri Agrupar Funciones Y Hacer Que El Código Marea Más Limpio. En Este algoritmo se espera a que CADA FUNCIÓN TERMINE DE EJUTARSAR PARA INICIAR LA SIGUIENTE. La Diferencia Esta en ol Debido a la nautraleza Asincrona de Nodejs (Un cadru de JavaScript) Debumos Utilizar Callback, Las Cuales Son Lamadas Que Realizan Cuando El Código de UNA Functión Termina de ejecutar. Es un aie de halcerle Saber Al Código O Functión Principal Que La Función Secunderia Ha Acabado de Ejecutar.

Es Decid, en Nodejs NO SE SEED HACHER ESTO:

DIV ID = „7C2B0535CE”>

codigo erroneo iv id = „c1a6bc8d9e”

javascript

app.get (‘/’, function (req, res) {
var usuario = fn.cargarusuario ();
VAR DATA = FN.CARGARDATOSBASEDATOS (USUARIO);
Var Meniu = Fn.cargardatosmenu (usuario);
Var antet = fn.cargarheader ();
VAR Corp = Fn.cargarcuerPo (date, meniu, usuario);
var subsol = fn.cargarfooter (meniu, usuario);
variabilă variabilă S = {antetul: antet, corp: corp, subsol: Footer};
req.render (‘ejemplo.ejs’, variabile);
});

> EL Código Antior Compilaría Coordamente, Pero Piude Dar rezultados Nici un esperados. Es decrip, el programa llama a la primera función e inmediamente llama a la segunda, y así se va. NUNCA ESPERA A QUE LA FUNCIÓN ANTERIOR SE termină de ejecutar. EnthoTonces Como La Date Variable Es La Que Contos La Información De La Base de DatOs Que Nos Interesa, Puede Que No Est Lasta Cuando SE Llame A Las Funcions Que de Dependent de Esta (EN Nuestro Código Sería CargarcuerPo ()). Esto Podría Ocasionar Que El Cuerpo de la Página Quede.

Para Solucionar El Problema anterior El Concepto De apelback, Para Poder Saber Cuando Una Función Termina de ejecutar. Esto Es Muy útil, Debido A es Posibile Que La Función Que Carga La Base de Datos Tarde Mucho. En Otros Lenguajes de Progración Esto Consuma Recursos del Sistema. Los Lenguajes asincronos solo se consumă los recursos por parte del servliciu olt utiliza la bază de datorie.Pentru JavaScript:

Callback-uri În stânga avem o funcție normală și dreapta avem același lucru Funcția cu apel invers (asincronă).

După cum putem vedea, când se utilizează apelurile de apel, notația „Eroare prima” este de obicei adoptată (sau mai întâi în limba engleză ). Adică, un apel înapoi trebuie să returneze două valori:

divid id = „A4d17E10F8”>

JavaScript

iv id = ” iv id =” 756E53C4C ”

127B18C494F „> iv id =” 473fa0056e ”

Acesta este un standard și se face pentru a prinde erori. Ceea ce de obicei se face de obicei este să returneze null errorul variabil dacă nu a apărut nicio eroare și altfel dacă a apărut.

Promisiuni

Promisiuni reprezintă o valoare sau un obiect pe care îl poate acum să fie disponibile sau în orice moment viitor. Adică, nu se știe la momentul în care acestea pot fi rezolvate și nici atunci când valoarea lor de returnare va fi disponibilă. Conceptul este similar cu cel al unui apel invers, dar sintaxa sa este puțin diferită.

div id = „A130A7A3ed”>

o promisiune are două moduri de a reveni la Cod original: dacă este finalizată sau dacă apare o eroare. Acest lucru este ușor de controlat folosind parametrii de completare și respingere. Acestea sunt utilizate în următorul cod:

divid id = „A4d17E10F8”>

javascript

/ Div> iv id = „756E53C4C”

> Cele de mai sus pot fi convertite o funcție care se bazează pe apeluri la unul cu promisiuni, după cum urmează:

promisiuni În stânga, funcția exemplului anterior cu apelurile de apel. În partea dreaptă, aceeași funcție, dar cu promisiuni.

Avantajul promisiunilor este că ele pot fi „combinate”. Aceasta este, dacă avem o funcție care încarcă datele din baza de date și avem nevoie de acele date pentru a le procesa, putem face ceva de genul acesta (presupunând că funcția de încărcare () Încarcă datele dintr-o bază de date și că funcția analizată () Analizați-le în modul în care dorim):

divid id = „A4D17E10F8”>

JavaScript

iv id = ” iv id =” 756E53C4C ”

> Și putem continua să o combinăm pentru a utiliza mai multe funcții

iv id = „9073E155CA”

iv id = „9073E155CA” JavaScript div id = „b54a520d4c” iv id = „756E53C4C”

3
3
3
3
3
4
5

> Acest cod anterior poate fi, de asemenea, scris după cum urmează (presupunând că analizele sunt o promisiune):

divid id = „A4d17E10f8”> iv id = „9073E155CA”

JavaScript

iv id = ” div id id =” b54a520d4c ”

iv id = „83381882F6”

1
2

3

> Acest lucru salvează destul spațiu în comparație cu apelurile de apeluri.

Stiluri de execuție asincrone

  • seria: o promisiune sau o funcție asincronă (bazată pe apeluri) este executată după executarea celei anterioare.
  • Toate procesele asincrone (promisiuni sau funcții asincrone bazate pe apeluri) sunt executate în același timp.
  • paralel cu limita de execuție paralelă: toate procesele asincrone (promisiuni sau funcții asincrone bazate pe bază La apeluri) sunt executate în același timp, dar cu o limită de procese simultane.
  • rasă (rasă): toate procesele asincrone (promisiuni sau funcții asincrone bazate pe apelback-uri) sunt executate în același timp și când Unul dintre acestea este terminat de funcționare, apoi este returnat la codul original, iar celelalte procese asincrone inițiate sunt oprite.

Aceste informații vor fi utile pentru GIS Asiens JavaScript și interfața web Publicații. Salutări

1
2
3
4
5
6
7
9
10

div id = „83381882F6”>

iv id = „83381882F6”

2
3
4
iv id = ”

Returnare nouă promisiune (Funcție (Fullfill, Respingere) {
// code
// Dacă doriți să finalizați, Fullfill este folosit,
// Dacă doriți să trimiteți o eroare, Respingeți („Eroare!” );
});
3
4
4

fn.cargardate (utilizator). Atunci (Funcție) {
// Variabila de date conține ceea ce este returnat de la
// promisiunea „încărcarea”
});

atele) {

Returnarea analizelor (datelor);
}). Apoi (funcția (datadalocare) {
// aici datele deja analizate, în date analizat
});
Fn.cargarde (User). Atunci (analizat) .Apoi (Funcție (Datalocack) {
// Aici avem datele deja analizate, în variabila de analiză a datelor
});


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *