KNOW INTUIT, Лекция, Компонентни технологии и разработка на разпределен софтуер

Синхронна и асинхронна комуникация

Когато се описва взаимодействието между елементи на софтуерни системи, инициаторът на взаимодействието, т.е. компонентът, който изпраща заявката за обработка, обикновено се наричаклиент, а отговарящият компонент, който обработва заявката, се наричасървър. „Клиент“ и „сървър“ в този контекст означават роли в дадено взаимодействие. В повечето случаи един и същ компонент може да изпълнява различни роли - понякога като клиент, след това като сървър - в различни взаимодействия. Само в малък клас системи ролите на клиент и сървър се присвояват на компоненти за продължителността на тяхното съществуване.

Синхронное взаимодействие между компоненти, при което клиентът, изпратил заявка, се блокира и може да продължи да работи само след получаване на отговор от сървъра. Поради тази причина този вид взаимодействие понякога се наричаблокиране.

Просто достъпът до функция или метод на обект чрез предаване на контрола нагоре в стека на повикванията е пример за синхронна комуникация.

know

Синхронното взаимодействие е доста лесно за настройка и много по-лесно за разбиране. Човешкият ум има един „поток на контрол“, представен като фокус на вниманието, и затова е по-лесно за човек да разбере процесите, които се развиват последователно, тъй като няма нужда постоянно да превключва вниманието към различни събития, случващи се едновременно. Програмният код на клиентския компонент, който описва синхронното взаимодействие, е по-прост - неговата част, която отговаря за обработката на отговора на сървъра, се намира непосредствено след частта, в която се формира заявката. Поради тяхната простота, синхронвзаимодействията в повечето системи се използват много по-често от асинхронните.

Синхронното взаимодействие обаче води до значително време, прекарано в чакане на отговор. Това време често може да се използва по по-полезен начин: докато чака отговор на една заявка, клиентът може да върши друга работа, да изпълнява други заявки, които не зависят от резултата, който все още не е пристигнал. Тъй като всички разпределени системи се състоят от достатъчно голям брой слоеве, през които преминават почти всички взаимодействия, общият спад на производителността, свързан със синхронизма на взаимодействията, се оказва много голям.

Най-често срещаният и исторически първият сравнително универсален начин за внедряване на синхронно взаимодействие в разпределени системи е извикване на отдалечена процедура (Remote Procedure Call, RPC; всъщност би било по-правилно да се каже „извикване на отдалечена процедура“, но поради исторически причини съществуващата терминология беше фиксирана). Модификацията му за обектно-ориентирана среда се наричаОтдалечено извикване на метод (RMI). RPC определя както начина, по който компонентите комуникират, така и как тези компоненти се разработват.

Първата стъпка в разработката е да се дефинира интерфейсът на процедурите, които ще се използват за отдалечено повикване. Това се прави с помощта наЕзика за дефиниране на интерфейс (IDL)Езика за дефиниране на интерфейса, който може да бъде специализиран език или обикновен език за програмиране, с ограничения, определени от възможността за прехвърляне на повиквания към отдалечена машина.

Дефиницията на процедура за отдалечени повиквания се компилира от IDL компилатора в описание на тази процедура на езици за програмиране,върху които ще се разработват клиентът и сървърът (например C/C++ заглавни файлове), и два допълнителни компонента -клиентскиисървърни мъничета(client stubиserver stub).

Client stubе компонент, хостван на същата машина като клиентския компонент. Извикване на отдалечена процедура от клиент се реализира като нормално локално извикване на конкретна функция в клиентски файл. Когато обработва това повикване, клиентският стълб прави следното:

лекция

В резултат на това извикването на отдалечена процедура изглежда като нормално извикване на функция към клиента.