JavaRush /Блоги Java /Random-TG /Мултисадо дар Java

Мултисадо дар Java

Дар гурӯҳ нашр шудааст

Муқаддима

Пеш аз омӯхтани риштаҳои Java, биёед ба ояндаи наздик назар кунем. Тасаввур кунед, ки шумо резюмеи худро пешниҳод кардед ва мусоҳиба доштед. Шумо ва якчанд даҳҳо ҳамкорони ояндаро барои кор дар як ширкати бузурги нармафзор даъват кардаанд. Дар байни дигар мушкилот, шумо бояд ҳуҷҷатҳои коғазиро барои кор ба корманди хастагии HR пешниҳод кунед.
Мултириш дар Java - 1
Барои суръат бахшидан ба ин раванд, довталабонро ба ин мавқеъ метавон ба ду гурӯҳ тақсим кард ва дар байни ду менеҷери кадрҳо тақсим кард (агар дар ширкат вуҷуд дошта бошад). Натичаи хамин аст, ки мо аз хисоби кори параллели лоихакашй процессро тезонем .
Мултириш дар Java - 2
Агар дар ширкат танҳо як корманди кадрӣ бошад, пас шумо бояд бо ягон роҳ берун равед. Масалан, шумо метавонед ҳамаро дубора ба ду гурӯҳ тақсим кунед, масалан, бо навбат бо духтарон ва писарон мусоҳиба кунед.
Мултириш дар Java - 3
Ё аз рӯи принсипи дигар: азбаски дар гурӯҳи поёнӣ одамон зиёданд, ба як писар ду духтарро иваз мекунем.
Мултисадо дар Java - 4
Ин тарзи ташкor кор бисёрсоҳавӣ номида мешавад . Корманди HR хастаи мо ба гурӯҳҳои гуногун мегузарад, то корманди навбатиро аз онҳо ҷалб кунад. Шояд ёздаҳ гурӯҳ ва чаҳор афсари кадрӣ вуҷуд дошта бошанд. Дар ин ҳолат коркарди бисёрҷабҳа дар баробари якчанд HR сурат мегирад, ки онҳо метавонанд шахси навбатиро аз ҳар гурӯҳ барои коркарди ҳуҷҷатҳои худ бигиранд.

Равандҳо

Раванди ( раванди ) дар ин ҳолат ташкor кори қабули ҳуҷҷатҳо хоҳад буд. Дар ташкилот якчанд равандро фарқ кардан мумкин аст: баҳисобгирии муҳосибӣ, таҳияи нармафзор, вохӯрӣ бо мизоҷон, амалиёти анборҳо ва ғайра. Барои ҳар як раванд захираҳо ҷудо карда мешаванд: биноҳо, кормандон барои иҷрои он. Равандҳо аз ҳамдигар ҷудо шудаанд: кормандони кадрҳо ба базаи баҳисобгирии муҳосибӣ дастрасӣ надоранд ва роҳбарони хидматрасонии муштариён дар гирду атрофи анбор намедаванд. Агар раванд лозим ояд, ки ба захираҳои ягон каси дигар дастрасӣ пайдо кунад, бояд робитаи байни равандҳо таъсис дода шавад: ёддоштҳо, вохӯриҳои муштарак.

Ҷараёнҳо

Кор дар раванд ба риштаҳо ташкил карда шудааст ( java thread). Барои шӯъбаи кадрҳо, ҷараён ташкor кор барои хидмат ба гурӯҳ аст. Дар худи расми аввал як ҷараён, дар сеи дигар ду. Дар доираи раванд, риштаҳо метавонанд дар як вақт иҷро карда шаванд - ду корманди кадрӣ ду ё зиёда гурӯҳи кормандони ояндаро қабул мекунанд. Муомилоти мутақобилаи афсарони кадрҳо бо гурӯҳҳо - коркарди риштаҳо дар дохor раванд - ҳамоҳангсозии ришта номида мешавад . Дар расмҳои тарҳрезии ду гурӯҳ аз ҷониби як корманди кадрӣ усулҳо нишон дода шудаанд: либоси ягона (духтар - писар - духтар - писар) ва бо афзалиятҳои гуногун (ду духтар бо як писар. Риштаҳо ба захираҳои раванде, ки ба онҳо тааллуқ доранд, дастрасӣ доранд: ба гурӯҳҳо ба корманди кадрҳо намунаҳои варақаҳои ариза, қалам барои пур кардани ҳуҷҷатҳо дода мешаванд. Аммо агар ҷараёнҳо бо чизҳои умумӣ барои онҳо ҳамкорӣ кунанд, пас ҳодисаҳо имконпазиранд. Агар афсари кадрҳо аз шумо хоҳиш кунад, ки номи шахси охирини навбатдорро фарёд занед, пас, дар мавриди ду гурӯҳ, ӯ пешакӣ мутмаин нест, ки номи зан ё мардро мешунавад. Чунин ихтилофҳои дастрасии додаҳо, басташавӣ ва роҳҳои ҳалли онҳо мавзӯи хеле муҳим мебошанд.

Ҳолати ҷараён

Ҳар як ришта дар яке аз ҳолатҳои зерин аст:
  • Эҷод карда шуд ( New) - хатти корманди кадрҳо омода мешавад, одамон ташкил мешаванд.
  • Ба кор андохта шуд ( Runnable) - навбати мо барои корманди кадрҳо тартиб дода шудааст ва коркард мешавад.
  • Бастан ( Blocked) – бачае, ки дар навбат меистод, кӯшиш мекунад, ки ном барорад, аммо чун шунид, ки духтари гурӯҳи дигар ин корро пеш аз ӯ оғоз кардааст, хомӯш монд.
  • Анҷом шуд ( Terminated) - тамоми навбат аз ҷониби корманди кадрҳо пур карда шудааст ва ба он лозим нест.
  • Интизорӣ( Waiting) – як навбат интизори сигнали дигар аст.
Ташкor риштаҳо ва таъсири мутақобилаи онҳо асоси кори самараноки равандҳо мебошад.

Биёед ба ҷаҳони IT баргардем

Дар асри 21 иҷроиши бисёрсоҳавӣ ва параллелӣ аҳамияти калон пайдо кардааст. Аз солҳои 90-уми асри гузашта дар компютерҳои хонагӣ системаҳои оператсионии бисёрҷабҳаи Windows, MacOS ва Linux устувор гаштанд. Дар онҳо шумо аксар вақт чор ё зиёда протсессори аслӣ пайдо карда метавонед. Шумораи блокҳои параллели кортҳои видеоии GPU аллакай аз ҳазор гузаштааст. Барномаҳои маъмул бо дарназардошти бисёрсоҳавӣ (мултитридия) навишта мешаванд, масалан, versionҳои муосири нармафзор барои коркарди графика, видео ё кор бо миқдори зиёди додаҳо: Adobe Photoshop, WinRar, Mathematica, бозиҳои муосир. Якчанд риштаи Java як мавзӯи хеле муҳим, маъмул ва мураккаб аст. Аз ин рӯ, дар курси JavaRush барои хуб фаҳмидани он вазифаҳои зиёде мавҷуданд. Намунаҳои Java оид ба multithreading ба шумо барои азхуд кардани нозукиҳо ва нозукиҳои асосии ин соҳа, ҳамоҳангсозии кори риштаҳо кӯмак мекунанд.

Раванд

Раванд як мисоли иҷрошавандаи барномаест, ки ба он Системаи Оператсионӣ (OS) хотира, вақти протсессор/ядроҳо ва дигар захираҳоро ҷудо кардааст. Муҳим он аст, ки хотира алоҳида ҷудо карда мешавад, фазои суроғаҳои равандҳои гуногун ба ҳамдигар дастрас нестанд. Агар равандҳо ба муошират ниёз дошта бошанд, онҳо метавонанд ин корро бо истифода аз файлҳо, қубурҳо ва дигар усулҳои иртибот байни равандҳо анҷом диҳанд.

Ҷараён

Java Thread(ҷараён). Баъзан, барои пешгирӣ кардани иштибоҳ бо дигар синфҳои Java Streamва монанди ин, риштаҳои Java аксар вақт ҳамчун ришта тарҷума карда мешаванд. Онҳо захираҳои ба раванд ҷудошударо истифода мебаранд ва роҳи иҷрои раванд мебошанд. Риштаи асосӣ методро иҷро мекунад mainва мебарояд. Вақте ки раванд иҷро мешавад, риштаҳои иловагӣ (риштаҳои кӯдакона) метавонанд пайдо шаванд. Риштаҳои як раванд метавонанд бо ҳамдигар маълумот мубодила кунанд. Java multithreading синхронизатсияи маълумотро ба назар гирифтанро талаб мекунад, инро фаромӯш накунед. Дар Java, раванд пас аз анҷоми риштаи охирини он қатъ мешавад. Барои вазифаҳои замина, риштаро ҳамчун демон ( ) оғоз кардан мумкин аст , фарқият аз кори муқаррарӣ дар он аст, ки онҳо ҳангоми қатъ шудани ҳамаи риштаҳои ғайридавлатии раванд daemonмаҷбуран қатъ карда мешаванд .daemon

Аввалин барномаи бисёрсоҳавӣ

Зиёда аз ним даҳҳо роҳҳои эҷоди риштаҳо мавҷуданд; дар курси JavaRush мо онҳоро ба таври муфассал баррасӣ хоҳем кард. Аввалан, биёед бо яке аз асосҳо шинос шавем. Синфи махсусе мавҷуд аст, ки Threadдар усули run()он шумо бояд codeеро нависед, ки мантиқи барномаро амалӣ мекунад. Пас аз сохтани ришта, шумо метавонед онро бо занг задан ба start(). Биёед як барномаи намоишӣ нависем, ки намунаи Java multithreading-ро амалӣ мекунад.
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 як мавзӯи мураккаб ва бисёрҷанба аст. Қобorяти навиштани code бо истифода аз ҳисоббарории параллелӣ, мултипликаторӣ ва бисёрсоҳавӣ ба шумо дар иҷрои самараноки вазифаҳо дар протсессорҳои муосир ва кластерҳои аз бисёр компютерҳо иборат кӯмак мерасонад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION