Кіріспе

Компьютерде бағдарламаны тікелей шақырмай орындау техникасы – компьютерлік ғылымдағы ұғым.

Компьютерлік ғылымда хабар алмасу – компьютерде мінез-құлықты (яғни бағдарламаны орындауды) іске қосу техникасы. Іске қосушы бағдарлама процеске (ол актер немесе объект болуы мүмкін) хабар жібереді және осы процеске және оны қолдайтын инфрақұрылымға сүйеніп, тиісті кодты таңдап орындайды. Хабар алмасу, процесс, кіші бағдарлама немесе функция тікелей атылып шақырылатын дәстүрлі бағдарламалаудан өзгеше. Хабар алмасу – кейбір параллелизм және объектіге бағытталған бағдарламалау модельдерінің негізгі элементі. Хабар алмасу қазіргі заманғы компьютерлік бағдарламалық құралдарда кеңінен қолданылады. Ол бағдарлама құрамындағы объектілердің бір-бірімен жұмыс істеуіне және әртүрлі компьютерлерде (мысалы, Интернетте) жұмыс істейтін объектілер мен жүйелердің өзара әрекеттесу құралы ретінде пайдаланылады. Хабар алмасу әртүрлі механизмдер арқылы, соның ішінде арналар арқылы іске асырылуы мүмкін.

Шолу

Хабарлама алмасу – компьютерде мінез-құлықты (яғни бағдарламаны іске қосу) шақыру тәсілі. Бағдарламаны атау арқылы шақырудың дәстүрлі тәсіліне қарағанда, хабарлама алмасу объектілік модельді пайдаланып, жалпы функцияны нақты іске асырудан ажыратады. Шақырушы бағдарлама хабарлама жібереді және тиісті кодты таңдап орындау үшін объектіге сенеді. Аралық қабатты пайдаланудың себептері негізінен екі категорияға бөлінеді: капсулация және тарату. Капсулация – бағдарламалық объектілердің басқа объектілердегі қызметтерді осы қызметтердің қалай іске асырылғанын білмей немесе оған мән бермей шақыра алуы керек деген идея. Капсулация кодтау логикасын азайтуға және жүйелерді күтіп ұстауды жеңілдетуге мүмкіндік береді. Мысалы, IF THEN операторларын қолданудың орнына, қандай подпрограмманы немесе функцияны шақыруды анықтайтын әзірлеуші, объектіге хабарлама жібере алады және объект өзінің түріне сәйкес тиісті кодты таңдайды. Бұл тәсілді қолданудың алғашқы мысалдарының бірі компьютерлік графика саласында болды. Графикалық объектілерді өңдеуде түрлі қиындықтар бар. Мысалы, жабық пішіннің ауданын есептеу үшін қолданылатын дұрыс формула пішіннің үшбұрыш, төртбұрыш, эллипс немесе шеңбер болуына байланысты өзгереді. Дәстүрлі компьютерлік бағдарламалауда бұл пішіннің қандай объект екенін тексеру үшін ұзақ IF THEN операторларын қолдануға және тиісті кодты шақыруға әкеледі. Объектіге бағытталған тәсіл – «Пішін» класын анықтау және оған «Төртбұрыш» және «Эллипс» (соның ішінде «Төртбұрыш» және «Шеңбер») сияқты кіші кластарды қосу, содан кейін кез келген пішінге оның ауданын есептеуді сұрап хабарлама жіберу. Әрбір «Пішін» объектісі сол пішін түріне сәйкес келетін формуламен кіші кластың әдісін шақырады. Таратылған хабарлама алмасу әзірлеушілерге әртүрлі жерлерде және әртүрлі уақытта жұмыс істейтін кіші жүйелерден құралған жүйелерді құру үшін ортақ қызметтерді ұсынатын архитектура қабатын ұсынады. Таратылған объект хабарлама жібергенде, хабарлама алмасу қабаты келесі мәселелерді шеше алады: хабарламаның бастапқы орнынан әртүрлі операциялық жүйелер мен бағдарламалау тілдерін қолдана отырып, процесті табу; тиісті объект хабарламаны өңдеуге дайын болмаса, хабарламаны кезекке қою және объект қол жетімді болған кезде оны шақыру; сондай-ақ, қажет болған жағдайда, жіберуші объект оны қабылдауға дайын болғанға дейін нәтижені сақтау; таратылған транзакциялар үшін әртүрлі транзакциялық талаптарды басқару, мысалы, деректердің атомарлық, сәйкестік, оқшаулану, беріктік (ACID) қасиеттерін тексеру.

Синхронды хабар беру

Синхронды хабар алмасу бір мезгілде жұмыс істейтін объектілер арасында жүзеге асады. Оны Java және Smalltalk сияқты объектіге бағытталған бағдарламалау тілдері қолданады. Синхронды хабар алмасу синхронды функцияны шақыруға ұқсас; функцияны шақырушы функция аяқталғанша күтеді, ал хабар жіберуші процесс хабарды қабылдаушы процесс аяқталғанша күтеді. Бұл кейбір қолданбалар үшін синхронды байланысты қолдануға қиын жасайды. Мысалы, ірі, таратылған жүйелер пайдалануға ыңғайлы болу үшін жеткілікті тиімді жұмыс істемеуі мүмкін. Мұндай ірі, таратылған жүйелер кейбір кіші жүйелері техникалық қызмет көрсету үшін уақытша тоқтатылған кезде де жұмыс істеуі керек. Мысалы, қарбалас кеңседе 100 компьютер бар делік, олар бір-біріне электрондық хаттарды тек синхронды хабар алмасу арқылы жібереді. Бір қызметкердің компьютерін өшіруі қалған 99 компьютердің тоқтауына себеп болуы мүмкін, қызметкер компьютерін қайта қосып, бір электрондық хатты өңдегенге дейін.

Асинхронды хабарлама беру

Асинхронды хабар алмасу арқылы сұрау тікелей жіберген объект хабарды жіберген кезде қабылдаушы объект істен шығуы немесе бос болуы мүмкін. Функцияны шақыру тұрғысынан алғанда, бұл шақырылған функцияның аяқталуын күтпей дереу қайта оралатын функция шақыруына ұқсайды. Хабарлар кезекке жіберіледі, онда оларды қабылдаушы процесс сұрағанға дейін сақталады. Қабылдаушы процесс өз хабарларын өңдеп, нәтижелерін бастапқы процесске (немесе белгілі бір келесі процесске) алу үшін кезекке жібереді. Асинхронды хабар алмасу бір уақытта жұмыс істемейтін жүйелер үшін деректерді сақтау және қайта жіберу үшін қосымша мүмкіндіктерді талап етеді және әдетте бағдарламалық қамтамастың аралық деңгейі (көбінесе делдалдық бағдарлама деп аталады) арқылы басқарылады; оның кең таралған түрі – хабарға бағытталған делдалдық бағдарлама (MOM). Асинхронды байланыста қажетті буфер толып кетсе, мәселелер туындауы мүмкін. Жіберушіні тоқтату немесе болашақ хабарларды жою туралы шешім қабылдау керек. Тоқтатылған жіберуші өзара байланыстың бұзылуына әкелуі мүмкін. Хабарлар жоғалса, байланыс сенімді болмайды.

Гибридтер

Синхронды байланыс, Синхронизаторды пайдалану арқылы асинхронды байланыс негізінде құрылуы мүмкін. Мысалы, α Синхронизаторы жіберушінің алушыдан растау хабарын күтетінін қамтамасыз етеді. Жіберуші келесі хабарламаны растау алынғаннан кейін ғана жібереді. Керісінше, асинхронды байланыс синхронды байланыс негізінде де құрылуы мүмкін. Мысалы, қазіргі заманғы микроядролар көбінесе тек синхронды хабар алмасу мүмкіндігін ұсынады, ал асинхронды хабар алмасу көмекші жіптерді пайдалану арқылы іске асырылуы мүмкін.

Таратылған нысандар

Хабарды жеткізу жүйелері таратылған немесе жергілікті объектілерді пайдаланады. Таратылған объектілерде жіберуші мен қабылдаушы әртүрлі компьютерлерде, әртүрлі операциялық жүйелерде, әртүрлі бағдарламалау тілдерін қолданып жұмыс істеуі мүмкін. Мұндай жағдайда, шина қабаты деректерді бір жүйеден екінші жүйеге түрлендіру, желі арқылы деректерді жіберу және қабылдау сияқты мәселелерді шешеді. Unix-тегі Қашық процедура шақыру (RPC) протоколы осыған алғашқы мысал болатын. Осы типтегі хабарды жеткізуде жіберушінің де, қабылдаушының да объектіге бағытталған бағдарламалауды қолдануы міндетті емес. Процедуралық тіл жүйелерін хабарларды жіберу және қабылдау мүмкіндігі бар, ірі грануляциялы объектілер ретінде орап қарастыруға болады. Таратылған объектілерді қолдайтын жүйелердің мысалдары: Emerald, ONC RPC, CORBA, Java RMI, DCOM, SOAP, NET Remoting, CTOS, QNX Neutrino RTOS, OpenBinder және D Bus. Таратылған объекті жүйелері "ештеңемен бөліспейтін" жүйелер деп аталады, себебі хабарды жеткізу абстракциясы хабарларды жіберуді іске асыру үшін қолданылатын негізгі күй өзгерістерін жасырады. Таратылған немесе асинхронды хабарды жеткізу процедураны шақыруға қарағанда қосымша шығындарға түседі. Хабарды жеткізу кезінде аргументтер жаңа хабарға көшірілуі керек. Кейбір аргументтер мегабайттармен өлшенетін деректерді қамтуы мүмкін, олардың барлығы көшіріліп, қабылдаушы объектіге жіберілуі тиіс. Дәстүрлі процедуралық шақырулар хабарды жеткізуден жадты пайдалану, беру уақыты және орналасуы тұрғысынан ерекшеленеді. Аргументтер қабылдаушыға әдетте қосымша сақтауды немесе беру уақытын қажет етпейтін жалпы мақсаттағы тіркегіштер арқылы немесе аргументтердің мекенжайларын қамтитын параметрлер тізімі арқылы беріледі (бірнеше бит). Бөлек мекенжай кеңістіктерін пайдаланатындықтан, таратылған жүйелерде мекенжайды беру мүмкін емес. Веб-браузерлер мен веб-серверлер – хабарды жеткізу арқылы байланысатын процестердің мысалы. URL – ресурстың ішкі процестерді ашпай сілтемелеудің мысалы. Ішкі процедура шақыру немесе әдіс шақыру шақырылған есептеу аяқталғанға дейін аяқталмайды. Асинхронды хабарды жеткізудің керісінше, сұрау хабары жіберілгеннен кейін ұзақ уақыттан соң ғана жауап келуі мүмкін. Хабарды өңдеуші, әдетте, бірнеше жіберушіден келген хабарларды өңдейді. Бұл оның күйі бір ғана жіберуші немесе клиент процесінің мінез-құлқына байланысты емес себептермен өзгеруі мүмкін дегенді білдіреді. Бұл әдістерді шақыратын объектінің әдеттегі мінез-құлқынан өзгеше: соңғысы әдіс шақырулары арасында өз күйін сақтап қалады деп күтіледі. Басқаша айтқанда, хабарды өңдеуші ұшқыш объекті сияқты әрекет етеді.

Математикалық модельдер

Хабардың өтуінің көрнекті математикалық модельдері – Актер моделі және Пи калькулі. Математикалық тұрғыдан алғанда, хабар – объектке басқаруды жеткізудің жалғыз құралы. Егер объект хабарламаға жауап берсе, онда оның сол хабарламаға арналған әдісі болады. Алан Кей хабарды берудің объектілерден ООП-да маңыздырақ екенін, ал объектілердің өзіне көбінесе артық назар аударылатынын айтқан. Тірі үлестірілген объектілер бағдарламалау моделі осы байқауға негізделген; ол күрделі үлестірілген жүйенің мінез-құлқын хабарлама үлгілері арқылы сипаттау үшін үлестірілген деректер ағыны тұжырымдамасын қолданады, сонымен қатар жоғары деңгейдегі функционалдық стильдегі сипаттамаларды пайдаланады.