Principi reaktivnog programiranja nisu novi, a mogu se pratiti od 70-ih i 80-ih godina u glavnim djelima Jim Gray-a i Pete Hellanda s tandem sustavom.
Osnove reaktivnog programiranja
Prednosti i ograničenja metode
Glavne prednosti Rx-a su povećana uporabaračunalnim resursima za multi-core i multiprocesorski hardver, povećanu produktivnost rezanjem točaka i povećanje produktivnosti smanjenjem bodova serijalizacije, u skladu s Amdahlovim zakonom i univerzalnim zakonom o skalabilnosti Gunther. Druga prednost je visoka učinkovitost za programere, budući da su tradicionalne paradigme programiranja nastojale pružiti jednostavan i podržan pristup asinkronim i neblokirajućim računalima i IO-u. Funkcionalno reaktivno programiranje rješava ove zadatke jer obično eliminira potrebu za jasnom koordinacijom između aktivnih komponenti.
Gdje se pojavljuje Rx, stvara se proces stvaranja komponenti i tijeka rada. Kako bi se u potpunosti iskoristilo asinkrono izvršavanje, uključivanje protu-hitova je ključno kako bi se izbjeglo prekomjerno korištenje ili radije neograničena potrošnja resursa. Da bi se osiguralo stabilno stanje u smislu protoka podataka, povratni tlak temeljen na opterećenju šalje uzlazni tok potražnje i prima poruke. Stoga su glavne prednosti sustava:Poboljšane performanse - zahvaljujući sposobnosti brzog i stabilnog obrađivanja velikih količina podataka. Poboljšani UX - Budući da je aplikacija osjetljivija na korisnika. Pojednostavljene izmjene i nadogradnje - zahvaljujući čitljivom i lakšem predviđanju koda. Ali unatoč činjenici da Reaktivno programiranje - vrlo korisna stvar pri stvaranjumodernog softvera, da bi razmišljali o sustavu na višoj razini, morate koristiti drugi alat - Reaktivnu arhitekturu za proces dizajniranja reaktivnih sustava. Osim toga, važno je zapamtiti da postoji mnogo programskih paradigmi, a Rx je samo jedan od njih, baš kao i bilo koji alat, nije namijenjen svim slučajevima uporabe.
Stabilnost je osjetljivost u slučaju kvara i predstavlja integralno funkcionalno svojstvo sustava. To zahtijeva razvoj, a ne samo dodavanje sustava u retroaktivnom obliku. Stabilnost reaktivnog programiranja javascripta nadilazi toleranciju grešaka i to nije zbog degradacije, ali u slučaju kvara može se potpuno ispraviti. To zahtijeva izolaciju komponenti i neuspjeh zadržavanja kako bi se izbjegli sudari koji se šire na susjedne komponente, što može dovesti do katastrofalnih scenarija s kaskadnim padovima. Stoga je ključ za stvaranje otpornih sustava - samopopravak to što se mogu opisati kao poruke poslane drugim komponentama koje djeluju kao nadzornici i kojima se upravlja iz sigurnog konteksta izvan odbačene komponente. Ovdje, kao vođene poruke, ta sredstva odlaze iz snažno povezanih, krhkih, duboko ukorijenjenih sinkronih lanaca poziva, koji se u većini slučajeva zanemaruju. Ideja je odvojiti upravljanje neuspjehima povratnog poziva, na primjer, oslobađanjem klijenta od odgovornosti za obradu kvarova poslužitelja.
Budući da je većina sustava inherentno složena, jedan od najvažnijih aspekata je osigurati da arhitektura sustava osigurava minimalno smanjenje performansi, kako u dizajnu tako iu održavanju komponenti, dok u isto vrijeme smanjuje nasumičnu složenost na minimum. To je važno, jer će tijekom životnog ciklusa sustava, ako nije pravilno dizajniran, biti teže i teže održati učinkovitost, te će biti potrebno sve više vremena i truda da bi se razumjelo kako bi se pronašli i otklonili problemi. Reaktivni sustavi su najproduktivnija arhitektura sustava u kontekstu multi-core, cloud i mobile arhitektura:Izolacija neuspjeha nudi prebacivanje između komponenti, sprječavajući neuspjeh kaskade i ograničavajući volumen i stupanj kvarova. Hijerarhija supervizora nudi nekoliko razina zaštite u kombinaciji sa sposobnostima samoizlječenja, eliminirajući mnoge privremene napuštene operativne troškove za istragu. Preskakanje prijenosa poruka i transparentnost lokacije omogućuju vam da onemogućite i zamijenite komponente bez utjecaja na rad krajnjeg korisnika. Time se smanjuju troškovi kvarova, njihova relativna važnost, kao i resursi potrebni za dijagnozu i korekciju. Replikacija smanjuje rizik od gubitka podataka i smanjuje učinak kvara na dostupnost pretraživanja i pohranjivanja informacija. Elastičnost vam omogućuje pohranjivanje resursa kolikokorištenje varira, što smanjuje tekuće troškove tijekom utovara i rizik od kvarova ili hitnog ulaganja u skalabilnost kako se opterećenje povećava.
Web aplikacije mogu uvelike imati koristi od razvojnog stila Rx-a, koji vam omogućuje da sastavite radne procese odgovora na upite koji uključuju grananje za servisiranje poziva, asinkroni dohvat resursa i generiranje odgovora, a zatim sortiranje za klijenta. Nedavno su se push-and-server događaji i web-utičnice sve više koristili u praksi, a da biste to učinili na skali, potreban vam je učinkovit način pohranjivanja mnogih otvorenih veza i tamo gdje IO ne blokira.
Za to postoje alati kao što su Streams i Futures, koji prave jednostavne neblokirajuće i asinkrone transformacije i guraju ih klijentima. Reaktivno programiranje s pristupom podacima - ažurira ih i zahtijeva u učinkovitom resursu, uglavnom koristeći SQL baze podataka ili NoSQL s asinkronim upravljačkim programima. Web-aplikacije također imaju koristi od razvoja jet sustava za stvari kao što su distribuirano caching, konzistentnost podataka i multi-node messaging. Tradicionalne web-aplikacije obično koriste čvorove. Ali čim programeri počnu koristiti Server-Sent-Events (SSE) i WebSockets, ti čvorovi postaju operativni, budući da barem podržavaju stanje veze klijenta, a push poruke se šalju na njih u skladu s tim. Za to je potreban razvoj reaktivnog sustavaTo je područje na koje je adresiranje primatelja važno putem poruka.
Nije potrebno koristiti Rx u mlaznim sustavima. Budući da Rx programiranje i reaktivni sustavi nisu jedno te isto. Iako često koriste zamjenjive izraze, nisu točni sinonimi i odražavaju različite stvari. Sustavi predstavljaju sljedeću razinu "reaktivnosti". Ova razina uključuje specifična dizajnerska i arhitektonska rješenja koja vam omogućuju stvaranje robusnih i fleksibilnih aplikacija. Ipak, vrlo dobra ideja - kombinacija metoda - donosi još više koristi aplikacijama, jer ih čini još više međusobno povezanim, omogućuje učinkovitije korištenje resursa i osigurava manje kašnjenje. Kada je riječ o ogromnim količinama podataka ili višezadaćnosti, asinkrona obrada često je potrebna kako bi sustavi bili brzi i osjetljivi. U Javi, predstavnici starog objektno orijentiranog programiranja, asinhronija može postati vrlo složena i učiniti kod teško razumljivim i podržanim. Dakle, Rx je osobito koristan za ovo čisto objektno orijentirano okruženje, jer pojednostavljuje rad asinkronih struja. Sa svojim najnovijim izdanjima, počevši od same Java 8, Java je napravila neke pokušaje da implementira ugrađenu reaktivnost, ali ti pokušaji danas nisu jako popularni kod programera. Međutim, postoje neke žive i redovito ažurirane implementacije treće strane za Java reaktivno programiranje koje pomažu spasiti dan i stoga su posebno cijenjene od strane Java programera.
U uobičajenoj Android aplikaciji, programeri obično izvode neke reaktivne operacije programiranja koristeći RxJava redovito, pa je potrebno usporediti brzinu, korištenje procesora i memoriju s istim operacijama koje su implementirane s oba Kotlin programa i RxJava. Ovo je početni test uspješnosti. Kad god se koristi novi alat koji se koristi u cijelom kodu, važno je razumjeti hoće li to utjecati na cjelokupnu izvedbu programa prije nego što odlučite koliko je korisno koristiti ga. Praksa korištenja daje kratak odgovor: u većini slučajeva korisnici bi trebali razmotriti zamjenu RxJave s Kotlinom, posebno na Androidu. RxJava programiranje junk-a može se koristiti u ograničenom broju slučajeva, au tim slučajevima možete miješati i RxJava i su-programe. Jednostavni uzroci:Osigurati mnogo veću fleksibilnost od uobičajenog Rx. Pruža bogat skup operatora u zbirkama koje izgledaju isto kao kod operatora RxJava. Kotlinovo reaktivno programiranje može interakciju s rxjava ako je potrebno. Vrlo su lagani i učinkoviti, uzimajući u obzir višu razinu korištenja CPU-a za prikupljanje smeća iz svih objekata koje je stvorio RxJava.
Reaktivna proširenja (ReactiveX ili RX) je knjižnica koja slijedi načela Rx-a, tj. Skup asinhronih i programskih događaja pomoćuopaženi slijed. Te knjižnice pružaju mnogo sučelja i metoda koje pomažu razvojnim inženjerima da napišu čist i jednostavan kod. Reaktivna proširenja dostupna su na nekoliko jezika. Programeri su posebno zainteresirani za RxJava i RxAndroid, jer je android najviše fokusirano područje. Jet programiranje pomoću RxJave je implementacija Java Reactive Extensiona iz Netflixa. To je u osnovi knjižnica koja je asinhrona i promatra uzorak promatrača. Možete stvoriti asinkroni promet, pretvoriti ih i konzumirati kao promatrač u različitim tokovima podataka. Knjižnica nudi širok raspon nevjerojatnih operatora kao što su mapa, asocijacija i filtar koji se mogu primijeniti na tok podataka. Kada programer počne koristiti stvarne primjere koda, saznaje više o operatorima i konverzijama.
Android Android aplikacija za Android (Android) class = "if uuid-2938324" src = "/misc /i /gallery /73564 /2938324.jpg" /Android Random Programming (RxAndroid) RxJava je nekoliko dodanih klasa, točnije, raspoređivači su predstavljeni u RxAndroidu (AndroidSchedulers.mainThread ()), koji igra važnu ulogu u podržavanju multithreading koncepta u Android aplikacijama. , koji se koristi u programiranju za Android za projektanti i njihove Ukratko:Schedulers.io () - neyntensyvnыh koristiti za obavljanje operacija kao što su internetske pozive, čitanje diskova/datoteke, operacije baze podataka, i koje podržava poolove nitova. AndroidSchedulers.mainThread () - omogućuje pristup glavnoj niti Thread /UI. Tipično, operacije u ovoj niti, kao što je ažuriranje sučelja korisničke interakcije. Stručnjaci savjetuju korisnike da ne bi trebali izvoditi intenzivne operacije na ovoj niti, jer to može uzrokovati bacanje programa ili ANR dijalog. Schedulers.newThread () koristeći ovo, nova nit će biti izrađena svaki put kada je zakazani zadatak zakazan. Obično se predlaže da se ne koristi vremenski raspored za dugotrajan rad. Niti stvoreni pomoću newThread () neće se ponovno koristiti. Schedulers.computation () - Ovaj grafikon može se koristiti za obavljanje intenzivnih operacija s procesorom, za obradu ogromnih podataka centra reaktivnog programiranja, za obradu rasterskih slika. Broj niti kreiranih pomoću ovog rasporeda u cijelosti ovisi o broju dostupnih CPU jezgri. Schedulers.single () - ovaj raspored će izvršiti sve zadatke redoslijedom koji se može koristiti kada je potrebna sekvencijalna izvedba. Schedulers.immediate () - Ovaj planer odmah izvršava zadatke, dok blokira glavni tok. Schedulers.trampoline () - Obavlja zadatak u načinu rada First In-First Out. Svi planirani zadaci izvršavat će se jedan za drugim, ograničavajući broj pozadinskih tokova na jedan. Schedulers.from () - omogućuje vam da kreirate planer od izvođača, ograničavajući broj stvorenih tokova. Kada je bazen tokova zauzet, zadatak će bitistaviti u red.
Sada kada postoje dobra teoretska znanja o RxJavi i RxAndroidu, možete otići na neke primjere koda kako biste bolje razumjeli koncept. Da biste započeli, morate dodati ovisnosti RxJava i RxAndroid za build.gradle i sinkronizirati projekt. Glavne faze.
Programiranje.
Promatrač vas signalizira kako bi mogao početi primati podatke na dva načina:SubscribeOn (Schedulers.io ()) - govori vam da pokrenete zadatak u pozadinskom toku. ObservOn (AndroidSchedulers.mainThread ()) - određuje promatrač za dobivanje podataka u streamu Android korisničkog sučelja.
To je sve, tako da će programer moći s RxJavom napisati svoj prvi program reaktivnog programiranja. Poduzeća i dobavljači intermedijarnog softvera počeli su koristiti Reactive, au 2016. i 2012. došlo je do velikog rasta korporativnog interesa za usvajanje ove paradigme. Rx nudi performanse razvojnih programera kroz učinkovitost resursa na razini komponenti za internu logiku i transformaciju toka podataka, dok reaktivni sustavi nude performanse za arhitekte i DevOps, zbog stabilnosti i elastičnosti na razini sustava. Koriste se za stvaranje Cloud Native i drugih velikih distribuiranih sustava. U praksi, knjige o reaktivnom programiranju Jave također su naširoko korištene metodama koje omogućuju kombiniranje načela projektiranja reaktivnih sustava.
Gdje se pojavljuje Rx, stvara se proces stvaranja komponenti i tijeka rada. Kako bi se u potpunosti iskoristilo asinkrono izvršavanje, uključivanje protu-hitova je ključno kako bi se izbjeglo prekomjerno korištenje ili radije neograničena potrošnja resursa. Da bi se osiguralo stabilno stanje u smislu protoka podataka, povratni tlak temeljen na opterećenju šalje uzlazni tok potražnje i prima poruke. Stoga su glavne prednosti sustava:
Stabilnost reaktivnih sustava
Izvedba arhitekture sustava
Odnos prema tradicionalnim web aplikacijama
Za to postoje alati kao što su Streams i Futures, koji prave jednostavne neblokirajuće i asinkrone transformacije i guraju ih klijentima. Reaktivno programiranje s pristupom podacima - ažurira ih i zahtijeva u učinkovitom resursu, uglavnom koristeći SQL baze podataka ili NoSQL s asinkronim upravljačkim programima. Web-aplikacije također imaju koristi od razvoja jet sustava za stvari kao što su distribuirano caching, konzistentnost podataka i multi-node messaging. Tradicionalne web-aplikacije obično koriste čvorove. Ali čim programeri počnu koristiti Server-Sent-Events (SSE) i WebSockets, ti čvorovi postaju operativni, budući da barem podržavaju stanje veze klijenta, a push poruke se šalju na njih u skladu s tim. Za to je potreban razvoj reaktivnog sustavaTo je područje na koje je adresiranje primatelja važno putem poruka.