JavaRush /Java blogi /Random-UZ /Java-da multithreading

Java-da multithreading

Guruhda nashr etilgan

Kirish

Java mavzularini o'rganishdan oldin, keling, yaqin kelajakni ko'rib chiqaylik. Tasavvur qiling-a, siz rezyumeni topshirdingiz va intervyu oldingiz. Siz va o'nlab bo'lajak hamkasblaringiz yirik dasturiy ta'minot kompaniyasiga ishlashga taklif qilingansiz. Boshqa qiyinchiliklar bilan bir qatorda, charchagan HR xodimiga ishga joylashish uchun qog'oz hujjatlarni topshirishingiz kerak.
Java-da multithreading - 1
Jarayonni tezlashtirish uchun ushbu lavozimga da'vogarlarni ikki guruhga bo'lish va ikkita HR menejeri (agar kompaniyada mavjud bo'lsa) o'rtasida taqsimlash mumkin. Natijada, biz parallel dizayn ishlari tufayli jarayonni tezlashtiramiz.
Java-da multithreading - 2
Agar kompaniyada faqat bitta xodim bo'lsa, unda siz qandaydir tarzda chiqib ketishingiz kerak bo'ladi. Misol uchun, siz yana hammani ikki guruhga bo'lishingiz mumkin, masalan, navbat bilan qizlar va o'g'il bolalar bilan suhbatlashing.
Java-da multithreading - 3
Yoki boshqa printsipga ko'ra: quyi guruhda ko'proq odam bo'lganligi sababli, biz ikkita qizni bir o'g'ilga almashtiramiz.
Java-da multithreading - 4
Ishni tashkil qilishning bunday usuli deyiladi ko'p tarmoqli . Bizning charchagan kadrlar bo'limi xodimi ulardan keyingi xodimni ishga olish uchun turli guruhlarga o'tadi. Ehtimol, o'n bitta guruh va to'rtta kadrlar bo'yicha ofitser bor. Bunday holda, multithreading qayta ishlash bir nechta HR tomonidan parallel ravishda amalga oshiriladi, ular o'z hujjatlarini qayta ishlash uchun istalgan guruhdan keyingi shaxsni olishi mumkin.

Jarayonlar

Jarayon ( jarayon ) bu holda hujjatlarni qabul qilish ishini tashkil etish bo'ladi. Tashkilotda bir nechta jarayonlarni ajratib ko'rsatish mumkin: buxgalteriya hisobi, dasturiy ta'minotni ishlab chiqish, mijozlar bilan uchrashuvlar, ombor operatsiyalari va boshqalar. Har bir jarayon uchun resurslar ajratiladi: binolar, uni bajarish uchun xodimlar. Jarayonlar bir-biridan ajratilgan: kadrlar bo'limi xodimlari buxgalteriya ma'lumotlar bazasiga kirish imkoniga ega emaslar va mijozlarga xizmat ko'rsatish menejerlari ombor atrofida yugurmaydilar. Agar jarayon boshqa birovning resurslariga kirishi kerak bo'lsa, jarayonlararo aloqani o'rnatish kerak: eslatmalar, qo'shma yig'ilishlar.

Oqimlar

Jarayondagi ish iplarga ( java thread) tashkil etilgan. Kadrlar bo'limi uchun oqim - bu guruhga xizmat ko'rsatish uchun ishni tashkil etish. Birinchi rasmda bitta oqim bor, keyingi uchtasida ikkita. Jarayon doirasida iplar parallel ravishda bajarilishi mumkin - ikkita HR xodimi ikki yoki undan ortiq kelajakdagi xodimlar guruhini qabul qiladi. Xodimlar xodimlarining guruhlar bilan o'zaro ta'siri - jarayon ichidagi iplarni qayta ishlash - deyiladi ip sinxronizatsiyasi . Bitta kadrlar bo'limi xodimi tomonidan ikkita guruhni loyihalash chizmalarida usullar ko'rsatilgan: forma (qiz - o'g'il - qiz - o'g'il) va turli xil ustuvorliklar bilan (ikki qiz bitta o'g'il bilan almashadi). Mavzular o'zlari tegishli bo'lgan jarayonning resurslariga kirish huquqiga ega: kadrlar bo'limi xodimiga guruhlarga ariza blankalarining namunalari, hujjatlarni to'ldirish uchun qalamlar beriladi. Ammo agar oqimlar ular uchun umumiy narsalar bilan o'zaro ta'sir qilsa, unda hodisalar mumkin. Agar kadrlar bo'limi xodimi sizdan navbatdagi oxirgi odamning ismini baqirishingizni so'rasa, u holda, ikkita guruh bo'lsa, u ayolning yoki erkakning ismini eshitishiga oldindan ishonch hosil qilmaydi. Ma'lumotlarga kirishning bunday ziddiyatlari, blokirovkalari va ularni hal qilish yo'llari juda muhim mavzudir.

Oqim holatlari

Har bir mavzu quyidagi holatlardan birida:
  • Yaratilgan ( New) - kadrlar bo'limi xodimi uchun chiziq tayyorlanmoqda, odamlar tartibga solinmoqda.
  • Ishga tushirildi ( Runnable) - bizning navbatimiz kadrlar bo'limi xodimi uchun navbatga qo'yildi va ko'rib chiqilmoqda.
  • Bloklangan ( Blocked) - navbatda turgan oxirgi yigit ismni baqirmoqchi bo'ladi, lekin keyingi guruhdagi qiz undan oldin buni boshlaganini eshitib, jim qoldi.
  • Tugallangan ( Terminated) - butun navbat kadrlar bo'limi xodimi tomonidan to'ldirilgan va bunga ehtiyoj yo'q.
  • Kutish ( Waiting) - bir navbat boshqasidan signalni kutmoqda.
Iplarni tashkil qilish va ularning o'zaro ta'siri jarayonlarning samarali ishlashi uchun asosdir.

Keling, IT olamiga qaytaylik

21-asrda ko'p tarmoqli va parallel bajarish dolzarb bo'lib qoldi. O'tgan asrning 90-yillaridan boshlab ko'p vazifali operatsion tizimlar Windows, MacOS va Linux uy kompyuterlarida mustahkam o'rnatildi. Ularda ko'pincha to'rt yoki undan ortiq yadroli protsessorlarni topishingiz mumkin. GPU video kartalarining parallel bloklari soni allaqachon mingdan oshdi. Ommabop dasturlar ko'p ish zarralarini (multithreading) hisobga olgan holda yoziladi, masalan, grafik, videoni qayta ishlash yoki katta hajmdagi ma'lumotlar bilan ishlash uchun dasturiy ta'minotning zamonaviy versiyalari: Adobe Photoshop, WinRar, Mathematica, zamonaviy o'yinlar. Java multithreading juda muhim, mashhur va murakkab mavzu. Shuning uchun JavaRush kursida uni juda yaxshi tushunish uchun ko'plab vazifalar mavjud. Multithreading bo'yicha Java misollari sizga ushbu sohaning asosiy nuanslari va nozikliklarini o'zlashtirishga yordam beradi, iplar ishini sinxronlashtiradi.

Jarayon

Jarayon - bu Operatsion tizim (OT) xotira, protsessor vaqti/yadrolari va boshqa resurslarni ajratgan dasturning ishlayotgan namunasidir. Xotira alohida ajratilishi muhim, turli jarayonlarning manzil bo'shliqlari bir-biriga kirish imkoniga ega emas. Agar jarayonlar o'zaro bog'lanishi kerak bo'lsa, ular buni fayllar, quvurlar va boshqa jarayonlararo aloqa usullari yordamida amalga oshirishlari mumkin.

Oqim

Java Thread(oqim). Ba'zan, boshqa Java sinflari va shunga o'xshashlar bilan chalkashmaslik uchun StreamJava mavzulari ko'pincha ip sifatida tarjima qilinadi. Ular jarayonga ajratilgan resurslardan foydalanadilar va jarayonni amalga oshirish usulidir. Asosiy ip usulni bajaradi mainva chiqadi. Jarayon bajarilganda, qo'shimcha iplar (bola iplar) paydo bo'lishi mumkin. Xuddi shu jarayonning iplari bir-biri bilan ma'lumot almashishi mumkin. Java multithreading ma'lumotlar sinxronizatsiyasini hisobga olishni talab qiladi, bu haqda unutmang. Java-da jarayon oxirgi ish zarrachalari tugashi bilan tugaydi. Fon vazifalari uchun ipni demon ( daemon) sifatida ishga tushirish mumkin, oddiydan farqi shundaki, daemonjarayonning barcha oqimlari tugagach, ular majburiy ravishda tugatiladi.

Birinchi ko'p tarmoqli dastur

Tarmoqlarni yaratishning o'ndan ortiq usullari mavjud, JavaRush kursida biz ularni batafsil ko'rib chiqamiz. Birinchidan, asosiylaridan biri bilan tanishamiz. Maxsus sinf mavjud bo'lib Thread, uning usulida run()dastur mantig'ini amalga oshiradigan kodni yozish kerak. Mavzuni yaratgandan so'ng, uni chaqirish orqali boshlashingiz mumkin start(). Keling, Java multithreading misolini amalga oshiradigan demo dasturini yozamiz.
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(); //Запускаем вторую (дочерний поток)
    }
}
Keling, dasturni ishga tushiramiz. Konsol asosiy tarmoqdan xabar chiqishini ko'rsatadi. Keyinchalik, har bir kichik ip o'z queue1navbatida queue2keyingi qayta ishlangan xodim haqida umumiy konsolga xabarlarni chiqaradi. Dasturning mumkin bo'lgan variantlaridan biri:
Начали!
Обработаны documentы: Мария
Обработаны documentы: Ivan
Обработаны documentы: Людмила
Обработаны documentы: Сергей
Обработаны documentы: Алиса
Обработаны documentы: Николай
Обработаны documentы: Карина
Обработаны documentы: Фердинанд
Обработаны documentы: Ольга
Обработаны documentы: Васorй

Process finished with exit code 0
Java-da multithreading - bu murakkab va ko'p qirrali mavzu. Parallel, ko'p vazifali va ko'p bosqichli hisoblash yordamida kod yozish qobiliyati zamonaviy ko'p yadroli protsessorlar va ko'plab kompyuterlardan tashkil topgan klasterlarda vazifalarni samarali amalga oshirishga yordam beradi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION