JavaRush /Java Blogu /Random-AZ /Java-da çox iş parçacığı

Java-da çox iş parçacığı

Qrupda dərc edilmişdir

Giriş

Java mövzularını öyrənməzdən əvvəl, yaxın gələcəyə nəzər salaq. Təsəvvür edin ki, CV-nizi təqdim etdiniz və müsahibə verdiniz. Siz və bir neçə onlarla gələcək həmkarınız böyük bir proqram təminatı şirkətinə işə dəvət olundunuz. Digər çətinliklərlə yanaşı, yorğun HR əməkdaşına işə qəbul üçün kağız sənədlər təqdim etməlisiniz.
Java-da multithreading - 1
Prosesi sürətləndirmək üçün vəzifəyə iddiaçıları iki qrupa bölmək və iki HR meneceri (əgər şirkətdə varsa) arasında bölüşdürmək olar. Nəticədə paralel dizayn işləri sayəsində prosesi sürətləndiririk.
Java-da multithreading - 2
Şirkətdə yalnız bir kadr zabiti varsa, birtəhər çıxmaq məcburiyyətində qalacaqsınız. Məsələn, hər kəsi yenidən iki qrupa ayıra bilərsiniz, məsələn, növbə ilə qızlar və oğlanlarla müsahibə aparın.
Java-da multithreading - 3
Yaxud başqa bir prinsipə görə: aşağı qrupda daha çox adam olduğu üçün bir oğlana iki qızı əvəzləyəcəyik.
Java-da multithreading - 4
İşin təşkili üçün bu üsul çox yivli adlanır . Yorğun HR əməkdaşımız onlardan növbəti işçini işə götürmək üçün müxtəlif qruplara keçir. On bir qrup və dörd kadr zabiti var. Bu halda, sənədlərini emal etmək üçün istənilən qrupdan növbəti şəxsi götürə bilən bir neçə HR tərəfindən paralel olaraq multithreading emal baş verəcəkdir.

Proseslər

Bu halda proses ( proses ) sənəd qəbulu işinin təşkili olacaqdır. Təşkilatda bir neçə prosesi ayırd etmək olar: mühasibat uçotu, proqram təminatının hazırlanması, müştərilərlə görüşlər, anbar əməliyyatları və s. Hər bir proses üçün resurslar ayrılır: onun icrası üçün binalar, işçilər. Proseslər bir-birindən təcrid olunub: HR əməkdaşlarının mühasibat uçotu bazasına girişi yoxdur, müştəri xidmətlərinin menecerləri isə anbarın ətrafında qaçmır. Əgər prosesin başqasının resurslarına çıxış əldə etməsi lazımdırsa, proseslərarası əlaqə yaratmaq lazımdır: memos, birgə görüşlər.

Axınlar

Prosesdəki iş iplərə ( java thread) təşkil edilir. HR şöbəsi üçün axın bir qrupa xidmət etmək üçün işin təşkilidir. Birinci şəkildə bir axın var, sonrakı üçdə iki. Proses çərçivəsində iplər paralel olaraq icra edilə bilər - iki HR əməkdaşı gələcək işçilərin iki və ya daha çox qrupunu qəbul edir. Kadrlar zabitlərinin qruplarla qarşılıqlı əlaqəsi - bir proses daxilində iplərin işlənməsi - mövzu sinxronizasiyası adlanır . Bir kadr zabiti tərəfindən iki qrupun dizaynının təsvirləri üsulları göstərir: uniforma (qız - oğlan - qız - oğlan) və müxtəlif prioritetlərlə (iki qız bir oğlanla növbələşir). Mövzuların aid olduqları prosesin resurslarına çıxışı var: qruplara HR məmuruna ərizə blanklarının nümunələri, sənədlərin doldurulması üçün qələmlər verilir. Ancaq axınlar onlar üçün ümumi olan şeylərlə qarşılıqlı əlaqədə olarsa, insidentlər mümkündür. Əgər kadr zabiti sizdən növbədəki sonuncu şəxsin adını qışqırmağı xahiş edərsə, iki qrup halında o, qadının, yoxsa kişinin adını eşitəcəyinə əvvəlcədən əmin deyil. Bu cür məlumatların əldə edilməsi münaqişələri, bloklanması və onların həlli yolları çox vacib mövzudur.

Axın vəziyyətləri

Hər bir mövzu aşağıdakı vəziyyətlərdən birindədir:
  • Yaradıldı ( New) – HR zabiti üçün xətt hazırlanır, insanlar təşkil olunur.
  • Başladı ( Runnable) – növbəmiz HR zabiti üçün düzülüb və işlənir.
  • Bloklandı ( Blocked) – növbəyə duran sonuncu gənc bir ad qışqırmağa çalışsa da, növbəti qrupdakı qızın ondan əvvəl bunu etməyə başladığını eşidəndə susdu.
  • Tamamlandı ( Terminated) - bütün növbə HR əməkdaşı tərəfindən tamamlandı və buna ehtiyac yoxdur.
  • Gözləyir ( Waiting) – bir növbə digərindən siqnal gözləyir.
İplərin təşkili və onların qarşılıqlı əlaqəsi proseslərin effektiv işləməsi üçün əsasdır.

Gəlin İT dünyasına qayıdaq

21-ci əsrdə çox yivli və paralel icra aktuallaşdı. Keçən əsrin 90-cı illərindən başlayaraq, Windows, MacOS və Linux çox funksiyalı əməliyyat sistemləri ev kompüterlərində möhkəm şəkildə qurulmuşdur. Onlarda tez-tez dörd və ya daha çox nüvəli prosessor tapa bilərsiniz. GPU video kartlarının paralel bloklarının sayı artıq mini keçib. Populyar proqramlar multithreading (multithreading) nəzərə alınmaqla yazılır, məsələn, qrafiklərin, videoların emalı və ya böyük həcmli məlumatlarla işləmək üçün proqram təminatının müasir versiyaları: Adobe Photoshop, WinRar, Mathematica, müasir oyunlar. Java multithreading çox vacib, populyar və mürəkkəb mövzudur. Buna görə də JavaRush kursunda onu çox yaxşı başa düşmək üçün çoxlu tapşırıqlar var. Çoxilliklərə dair Java nümunələri iplərin işini sinxronlaşdıraraq bu sahənin əsas nüanslarını və incəliklərini mənimsəməyə kömək edəcəkdir.

Proses

Proses, Əməliyyat Sisteminin (ƏS) yaddaş, prosessor vaxtı/nüvələri və digər resurslar ayırdığı proqramın işləyən nümunəsidir. Yaddaşın ayrıca ayrılması vacibdir, müxtəlif proseslərin ünvan boşluqları bir-birinə əlçatan deyil. Proseslərin əlaqə saxlaması lazımdırsa, onlar bunu fayllar, borular və digər proseslər arası əlaqə üsullarından istifadə edərək edə bilərlər.

Axın

Java Thread(axın). Bəzən, digər Java sinifləri Streamvə bənzərləri ilə qarışıqlığın qarşısını almaq üçün Java mövzuları tez-tez ip kimi tərcümə olunur. Onlar bir prosesə ayrılan resurslardan istifadə edirlər və prosesin icra üsuludur. Əsas mövzu metodu yerinə yetirir mainvə çıxır. Proses icra edildikdə, əlavə iplər (alt iplər) yarana bilər. Eyni prosesin mövzuları bir-biri ilə məlumat mübadiləsi edə bilər. Java multithreading məlumat sinxronizasiyasının nəzərə alınmasını tələb edir, bu barədə unutmayın. Java-da proses onun axırıncı ipi bitdikdən sonra başa çatır. Arxa plan tapşırıqları üçün iplik bir demon ( ) kimi işə salına bilər , adi olandan fərqi prosesin daemonbütün qeyri-telləri bitdikdə onların məcburi şəkildə dayandırılmasıdır .daemon

İlk çox yivli proqram

İplər yaratmağın yarım ondan çox yolu var, JavaRush kursunda biz onları ətraflı şəkildə araşdıracağıq. Əvvəlcə əsaslardan biri ilə tanış olaq. ThreadMetodunda run()proqramın məntiqini həyata keçirən kodu yazmağınız lazım olan xüsusi bir sinif var . Mövzu yaratdıqdan sonra start(). Java multithreading nümunəsini həyata keçirən demo proqramı yazaq.
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(); //Запускаем вторую (дочерний поток)
    }
}
Proqramı işə salaq. Konsol əsas mövzudan gələn mesajı göstərir. Sonra, hər bir uşaq mövzu öz queue1növbəsində queue2növbəti emal edilmiş işçi haqqında ümumi konsoluna mesajlar çıxarır. Proqram üçün mümkün variantlardan biri:
Начали!
Обработаны documentы: Мария
Обработаны documentы: Ivan
Обработаны documentы: Людмила
Обработаны documentы: Сергей
Обработаны documentы: Алиса
Обработаны documentы: Николай
Обработаны documentы: Карина
Обработаны documentы: Фердинанд
Обработаны documentы: Ольга
Обработаны documentы: Васorй

Process finished with exit code 0
Java-da multithreading mürəkkəb və çoxşaxəli mövzudur. Paralel, çoxtaplı və çoxşaxəli hesablamalardan istifadə edərək kod yazmaq bacarığı sizə müasir çoxnüvəli prosessorlarda və çoxlu kompüterlərdən ibarət klasterlərdə tapşırıqları səmərəli şəkildə həyata keçirməyə kömək edəcək.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION