Принципите на реактивното програмиране не са нови и могат да бъдат проследени от 70-те и 80-те години в основните произведения на Джим Грей и Пит Хелланд с тандемна система.
Основи на реактивното програмиране
Предимства и ограничения на метода
В случаите на Rx се създава процесът на създаване на компоненти и работния процес. За да се използва пълноценно асинхронното изпълнение, включването на насрещни удари е от решаващо значение, за да се избегне прекомерното използване или по-скоро неограничено потребление на ресурси. За да се осигури стабилно състояние по отношение на потока от данни, обратното налягане, базирано на натоварване, изпраща възходящ поток на търсенето и получава съобщения. По този начин, основните предимства на системата са:
Устойчивост на реактивните системи
Изпълнение на системната архитектура
Връзка с традиционните уеб приложения
Уеб приложенията могат до голяма степен да се възползват от стила на разработка на Rx, който ви позволява да съставяте работни потоци за отговор на заявки, които включват разклоняване към обслужващи повиквания, асинхронно извличане на ресурси и генериране на отговор и след това сортиране за клиента. Напоследък, push-and-server събития и web sockets стават все по-често използвани на практика и за да направите това по скала, се нуждаете от ефективен начин за съхраняване на много отворени връзки и където IO не блокира.
За тази цел съществуват инструменти като потоци и фючърси, които правят прости неблокиращи и асинхронни трансформации и ги изтласкват на клиентите. Реактивно програмиране с достъп до данни - актуализира и изисква в ефикасен ресурс, използвайки основно SQL бази данни или NoSQL с асинхронни драйвери. Уеб приложенията също се възползват от разработването на реактивна система за неща като разпределено кеширане, последователност на данните и многоузловни съобщения. Традиционните уеб приложения обикновено използват възли. Но веднага след като програмистите започнат да използват Server-Sent-Events (SSE) и WebSockets, тези възли стават оперативни, тъй като поне поддържат състоянието на връзката с клиента и съответно се изпращат съобщения до тях. Това изисква разработването на реактивна система, тъй катоТова е област, в която адресирането на получатели е важно чрез съобщенията.
Не е необходимо да се използва Rx в реактивни системи. Защото Rx програмирането и реактивните системи не са едно и също. Въпреки че често използват взаимозаменяеми термини, те не са точни синоними и отразяват различни неща. Системите представляват следващото ниво на "реактивност". Това ниво включва специфични дизайнерски и архитектурни решения, които ви позволяват да създавате стабилни и гъвкави приложения. Въпреки това една много добра идея - комбинация от методи - носи още повече ползи за приложенията, тъй като ги прави още по-взаимосвързани, позволява по-ефективно използване на ресурсите и осигурява по-ниско забавяне. Когато става въпрос за огромни обеми данни или многозадачност, често се изисква асинхронна обработка, за да се направят системите бързи и отзивчиви. В Java, представител на стария обектно-ориентирано програмиране, асинхронността може да стане наистина сложна и да направи кода трудно разбираем и поддържан. По този начин Rx е особено полезен за тази чисто обектно-ориентирана среда, тъй като опростява работата на асинхронните потоци. С последните си версии, започвайки с Java 8, Java е направила някои опити да внедри вградена реактивност, но тези опити днес не са много популярни сред разработчиците. Въпреки това, има някои ярки и редовно обновявани внедрявания от трети страни за реактивно програмиране на Java, които помагат за спасяването на деня и затова са особено ценени от Java разработчиците.
В обичайното приложение за Android, програмистите обикновено извършват някои операции по реактивно програмиране, като използват RxJava редовно, така че е необходимо да се сравняват скоростта, използването на процесора и паметта с едни и същи операции, които са били реализирани с ко-програми на Kotlin и RxJava. Това е първоначален тест за производителност. Всеки път, когато се използва нов инструмент, който е широко използван в целия код, важно е да се разбере дали това ще повлияе на цялостното изпълнение на програмата, преди да се реши как е целесъобразно да се използва. Практиката на използване дава кратък отговор: в повечето случаи потребителите трябва да обмислят замяна на RxJava с Kotlin, особено на Android. Програмирането на нежелани съобщения RxJava може да се използва в ограничен брой случаи, като в тези случаи можете да смесвате RxJava и ко-програми. Прости причини:Осигурете много по-голяма гъвкавост от обичайното Rx. Предоставя богат набор от оператори в колекции, които изглеждат по същия начин като операторите RxJava. Реакционното програмиране на Kotlin може да взаимодейства с rxjava, ако е необходимо. Те са много леки и ефективни, като се има предвид по-високото ниво на използване на процесора за събиране на отпадъци от всички обекти, създадени от RxJava.
Реактивни разширения (ReactiveX или RX) са библиотека, която следва принципите на Rx, т.е. събранието на асинхронни и програмно базирани събития, като се използванаблюдавана последователност. Тези библиотеки осигуряват много интерфейси и методи, които помагат на разработчиците да пишат чист и прост код. Реактивните разширения са налични на няколко езика. Програмистите са особено заинтересовани от RxJava и RxAndroid, тъй като android е най-фокусираната област. Jet програмиране с RxJava е изпълнението на Java реактивно разширение от Netflix. Това е в общи линии библиотека, която е асинхронна, наблюдавайки модела на наблюдателя. Можете да създадете асинхронен трафик, да ги конвертирате и да ги консумирате като наблюдател в различни потоци от данни. Библиотеката предлага широк спектър от невероятни оператори като карта, асоциация и филтър, които могат да бъдат приложени към потока от данни. Когато програмистът започне да използва действителни примери на кодове, той научава повече за операторите и реализациите.
Android Android приложение за Android (Android) RxJava е няколко добавени класа, по-конкретно, планировчиците са представени в RxAndroid (AndroidSchedulers.mainThread ()), който играе важна роля в поддържането на многопоточната концепция в Android приложенията. , използван в програмирането за Android за проектанти и тяхното обобщение:Schedulers.io () - neyntensyvnыh използва за извършване на операции като интернет разговори, четене на дискове/файлове, операции с бази данни и поддържащи пулове с нишки. AndroidSchedulers.mainThread () - Предоставя достъп до главната нишка Thread /UI. Обикновено операциите в тази нишка, като например обновяване на интерфейса за взаимодействие с потребителя. Експертите съветват потребителите, че не трябва да извършват интензивни операции на тази тема, тъй като това може да доведе до програмиране или ANR диалог. Schedulers.newThread () използвайки това, ще се създава нова нишка всеки път, когато планираната задача е насрочена. Обикновено се предлага да не се използва график за продължителна работа. Потоците, създадени с newThread (), няма да бъдат използвани повторно. Schedulers.computation () - Тази графика може да се използва за извършване на интензивни операции с процесора, за обработка на огромни данни от центъра за реактивно програмиране, за обработка на растерни изображения. Броят на нишките, създадени с помощта на този график, зависи изцяло от броя на наличните CPU ядра. Schedulers.single () - този планировчик ще изпълнява всички задачи в ред, който може да се използва, когато се изисква необходимостта от последователно изпълнение. Schedulers.immediate () - Този планировчик незабавно изпълнява задачи, докато блокира основния поток. Schedulers.trampoline () - Изпълнява задача в режим Първо в първо излизане. Всички планирани задачи ще се изпълняват едно след друго, ограничавайки броя на фоновите потоци до един. Schedulers.from () - ви позволява да създадете график от изпълнител, като ограничите броя на създадените потоци. Когато пулът от потоци е зает, задачата ще бъдепоставете в опашката.
Сега, когато има добри теоретични познания за RxJava и RxAndroid, можете да отидете в някои примери на кодове, за да разберете по-добре концепцията. За да започнете, трябва да добавите зависимостите RxJava и RxAndroid за build.gradle и синхронизиране на проекта. Основните етапи.
Програмиране.
Наблюдателят ви подписва така, че да може да започне да получава данни по два начина:SubscribeOn (Schedulers.io ()) - ви казва да стартирате задачата във фонов поток. ObservOn (AndroidSchedulers.mainThread ()) - Определя наблюдател за получаване на данни в потока на потребителския интерфейс на Android.
Това е всичко, така че програмистът ще може да напише първата си програма за реактивно програмиране с RxJava. Предприятията и доставчиците на междинния софтуер започнаха да използват Реактивен, а през 2016 - 2012 г. се наблюдава огромен ръст на корпоративния интерес към приемането на тази парадигма. Rx предлага ефективност на разработчиците чрез ресурсна ефективност на ниво компонент за вътрешна логика и трансформация на потока от данни, докато реактивните системи предлагат ефективност за архитекти и DevOps, поради стабилността и еластичността на системата. Те се използват за създаване на Cloud Native и други широкомащабни разпределени системи. На практика книгите за реактивно програмиране на Java също са широко използвани с методи, които позволяват комбиниране на принципите на проектиране на реактивни системи.
За тази цел съществуват инструменти като потоци и фючърси, които правят прости неблокиращи и асинхронни трансформации и ги изтласкват на клиентите. Реактивно програмиране с достъп до данни - актуализира и изисква в ефикасен ресурс, използвайки основно SQL бази данни или NoSQL с асинхронни драйвери. Уеб приложенията също се възползват от разработването на реактивна система за неща като разпределено кеширане, последователност на данните и многоузловни съобщения. Традиционните уеб приложения обикновено използват възли. Но веднага след като програмистите започнат да използват Server-Sent-Events (SSE) и WebSockets, тези възли стават оперативни, тъй като поне поддържат състоянието на връзката с клиента и съответно се изпращат съобщения до тях. Това изисква разработването на реактивна система, тъй катоТова е област, в която адресирането на получатели е важно чрез съобщенията.