JavaRush /Java блогы /Random-KK /Java тіліндегі көп ағынды

Java тіліндегі көп ағынды

Топта жарияланған

Кіріспе

Java ағындары туралы білмес бұрын, жақын болашақты қарастырайық. Өзіңіздің түйіндемеңізді жіберіп, сұхбат алдыңыз деп елестетіңіз. Сіз және бірнеше ондаған болашақ әріптестер үлкен бағдарламалық жасақтама компаниясына жұмысқа шақырылды. Басқа қиындықтармен қатар, сіз шаршаған HR қызметкеріне жұмысқа орналасу үшін қағаз құжаттарын тапсыруыңыз керек.
Java тіліндегі көп ағынды – 1
Процесті жылдамdate үшін лауазымға үміткерлерді екі топқа бөлуге және екі HR менеджеріне бөлуге болады (егер компанияда бар болса). Нәтижесінде біз параллельді жобалау жұмыстарының арқасында процесті тездетеміз.
Java тіліндегі көп ағынды – 2
Егер компанияда бір ғана кадр қызметкері болса, онда сіз қандай да бір жолмен шығуға тура келеді. Мысалы, тағы да барлығын екі топқа бөлуге болады, мысалы, қыздар мен ұлдардан кезекпен сұхбат алу.
Java тіліндегі көп ағынды – 3
Немесе басқа қағида бойынша: төменгі топта адам көп болғандықтан, бір ұлға екі қызды ауыстырамыз.
Java тіліндегі көп ағынды – 4
Жұмысты ұйымдастырудың бұл жолы көп ағынды деп аталады . Шаршаған HR қызметкеріміз олардың арасынан келесі қызметкерді алу үшін әртүрлі топтарға ауысады. Мүмкін он бір топ және төрт кадр офицері бар. Бұл жағдайда көп ағынды өңдеу бірнеше HR-мен қатар жүреді, олар құжаттарын өңдеу үшін кез келген топтан келесі адамды қабылдай алады.

Процестер

Бұл жағдайда құжат қабылдау жұмысын ұйымдастыру процесі ( процесс ) болады. Ұйымда бірнеше процестерді бөліп көрсетуге болады: бухгалтерлік есеп, бағдарламалық қамтамасыз етуді әзірлеу, клиенттермен кездесулер, қойма операциялары және т.б. Әр процесс үшін ресурстар бөлінеді: үй-жайлар, оны орындау үшін қызметкерлер. Процестер бір-бірінен оқшауланған: кадрлар бөлімінің қызметкерлері бухгалтерлік есеп деректер базасына қол жеткізе алмайды, ал тұтынушыларға қызмет көрсету менеджерлері қойманың айналасында жүгірмейді. Егер процеске басқа біреудің ресурстарына қол жеткізу қажет болса, онда процессаралық байланысты орнату қажет: меморандумдар, бірлескен жиналыстар.

Ағындар

Процесстегі жұмыс ағындарға ( java thread) ұйымдастырылған. Кадрлар бөлімі үшін ағын - бұл топқа қызмет көрсету үшін жұмысты ұйымдастыру. Бірінші суретте бір ағын, келесі үшеуінде екі. Процесс аясында ағындарды параллель орындауға болады - екі HR қызметкері болашақ қызметкерлердің екі немесе одан да көп тобын қабылдайды. Кадрлық қызметкерлердің топтармен өзара әрекеттесуі - процесс ішіндегі ағындарды өңдеу - ағынды синхрондау деп аталады . Бір кадрлық қызметкердің екі топты безендіру сызбаларында әдістер көрсетілген: форма (қыз - ұл - қыз - ұл) және әртүрлі басымдықтармен (екі қыз бір ұлмен кезектесіп отырады). Тақырыптар өздері жататын процестің ресурстарына қол жеткізе алады: топтарға кадрлық қызметкерге өтініш бланкілерінің үлгілері, құжаттарды толтыруға арналған қаламдар беріледі. Бірақ егер ағындар оларға ортақ нәрселермен өзара әрекеттессе, онда оқиғалар болуы мүмкін. Егер кадр қызметкері кезекте тұрған соңғы адамның атын айтуды сұраса, онда екі топ болған жағдайда ол әйелдің немесе ер адамның атын еститініне алдын ала сенімді емес. Мұндай деректерге қол жеткізу қайшылықтары, блоктау және оларды шешу жолдары өте маңызды тақырып болып табылады.

Ағын күйлері

Әрбір ағын келесі күйлердің бірінде:
  • Құрылды ( New) – кадрлар бөлімінің қызметкері үшін желі дайындалуда, адамдар реттелуде.
  • Іске қосылды ( Runnable) – біздің кезегіміз HR қызметкері үшін кезекке тұрды және өңделуде.
  • Бұғатталған ( Blocked) – кезекте тұрған соңғы жігіт атын айтқысы келеді, бірақ келесі топтағы қыздың бұл әрекетті өзінен бұрын бастағанын естіп, үнсіз қалды.
  • Аяқталды ( Terminated) - барлық кезекті кадрлар бөлімінің қызметкері толтырды және оған қажеттілік жоқ.
  • Waiting( Waiting) – бір кезек екіншісінен сигнал күтуде.
Жіптерді ұйымдастыру және олардың өзара әрекеттесуі процестердің тиімді жұмыс істеуінің негізі болып табылады.

IT әлеміне оралайық

21 ғасырда көп ағынды және параллельді орындау өзекті болды. Өткен ғасырдың 90-шы жылдарынан бастап Windows, MacOS және Linux көп тапсырмалы операциялық жүйелер үй компьютерлеріне берік орнықты. Оларда төрт немесе одан да көп ядролық процессорларды жиі таба аласыз. GPU видеокарталарының параллель блоктарының саны мыңнан асты. Танымал бағдарламалар көп ағынды (көп ағынды) ескере отырып жазылады, мысалы, графиканы, бейнені өңдеуге немесе үлкен көлемдегі деректермен жұмыс істеуге арналған бағдарламалық қамтамасыз етудің заманауи нұсқалары: Adobe Photoshop, WinRar, Mathematica, заманауи ойындар. Java көп ағыны өте маңызды, танымал және күрделі тақырып. Сондықтан JavaRush курсында оны өте жақсы түсіну үшін көптеген тапсырмалар бар. Көп ағындыдағы Java мысалдары ағындардың жұмысын үндестіре отырып, осы саланың негізгі нюанстары мен нәзіктіктерін меңгеруге көмектеседі.

Процесс

Процесс – операциялық жүйе (ОЖ) жадты, процессор уақытын/ядроларын және басқа ресурстарды бөлген бағдарламаның іске қосылған данасы. Жадтың бөлек бөлінгені маңызды, әртүрлі процестердің addressтік кеңістіктері бір-біріне қол жетімді емес. Егер процестерге байланысу қажет болса, олар мұны файлдарды, құбырларды және басқа процессаралық байланыс әдістерін пайдалана алады.

Ағын

Java Thread(ағын). Кейде басқа Java сыныптарымен Streamжәне сол сияқтылармен шатастырмау үшін Java ағындары жиі ағын ретінде аударылады. Олар процеске бөлінген ресурстарды пайдаланады және процестің орындалу тәсілі болып табылады. Негізгі ағын әдісті орындайды mainжәне шығады. Процесс орындалған кезде қосымша ағындар (еншілес ағындар) пайда болуы мүмкін. Бір процестің ағындары бір-бірімен деректер алмаса алады. Java көп ағыны деректерді синхрондауды ескеруді қажет етеді, бұл туралы ұмытпаңыз. Java тілінде процесс оның соңғы ағыны аяқталған кезде аяқталады. Фондық тапсырмалар үшін ағынды демон ( daemon) ретінде бастауға болады, кәдімгіден айырмашылығы - daemonпроцестің барлық ағындары аяқталған кезде олар мәжбүрлі түрде тоқтатылады.

Бірінші көп ағынды қолданба

Жіптерді жасаудың жарты оннан астам жолы бар; JavaRush курсында біз оларды егжей-тегжейлі қарастырамыз. Алдымен, негізгілердің бірімен танысайық. Арнайы класс бар, оның Threadәдісінде run()бағдарлама логикасын жүзеге асыратын codeты жазу керек. Жіпті жасағаннан кейін оны шақыру арқылы бастауға болады start(). Java көп ағынының мысалын жүзеге асыратын демонстрациялық бағдарламаны жазайық.
class PeopleQueue extends Thread    {// Наша очередь из сотрудников, наследник класса Thread
    private String[] names;

    PeopleQueue(String... names) {// Конструктор, аргумент- массив имен сотрудников
        this.names = names;
    }

    @Override
    public void run() { // Этот метод будет вызван при старте потока
        for (int i = 0; i < names.length; i++) { // Вывод в цикле с паузой 0.5 сек очередного сотрудника
            System.out.println("Обработаны documentы: " + names[i]);
            try {
                sleep(500); // Задержка в 0.5 сек
            } catch (Exception e) {}
        }
    }
}

public class HR    {// Класс для демонстрации работы потока
    public static void main(String[] args) {
        // Создаем две очереди
        PeopleQueue queue1 = new PeopleQueue("Ivan","Сергей","Николай","Фердинанд","Basil");
        PeopleQueue queue2 = new PeopleQueue("Мария","Людмила","Алиса","Карина","Olga");

        System.out.println("Начали!"); // Сообщение из главного потока программы
        queue1.start();    //Запускаем одну очередь (дочерний поток)
        queue2.start(); //Запускаем вторую (дочерний поток)
    }
}
Бағдарламаны іске қосайық. Консоль негізгі ағыннан хабарлама шығысын көрсетеді. Әрі қарай, әрбір еншілес ағын келесі өңделген қызметкер туралы ортақ консольге хабарламаларды шығарады queue1. queue2Бағдарламаның ықтимал нұсқаларының бірі:
Начали!
Обработаны documentы: Мария
Обработаны documentы: Ivan
Обработаны documentы: Людмила
Обработаны documentы: Сергей
Обработаны documentы: Алиса
Обработаны documentы: Николай
Обработаны documentы: Карина
Обработаны documentы: Фердинанд
Обработаны documentы: Ольга
Обработаны documentы: Васorй

Process finished with exit code 0
Java тіліндегі көп ағынды – күрделі және көп қырлы тақырып. Параллельді, көп тапсырмалы және көп ағынды есептеулерді пайдаланып code жазу мүмкіндігі қазіргі заманғы көп ядролы процессорлар мен көптеген компьютерлерден тұратын кластерлерде тапсырмаларды тиімді орындауға көмектеседі.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION