CodeGym /Kurslar /Python SELF AZ /Çox axınlılıq

Çox axınlılıq

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1.1 Yaranma tarixi

İnsanlıq çox vaxt elə bir böyük layihə qurmaq ideyasına gəlir ki, bütün əvvəlki böyük layihələri kölgədə qoysun. Misirdəki Xeops piramidası — ən böyüyü, Dubaydakı Bürc Xəlifə — ən hündürü, Böyük Çin Divarı isə — ən uzunudur.

Lakin belə layihələr üzərində işi təşkil etmək çox çətindir. Əgər yeni bir piramidanı iki dəfə hündür tikmək istəsək, bu, səkkiz dəfə daha çox daş tələb edəcək. Demək ki, ya daş karxanalarının istehsal gücünü artırmaq, ya da daha çox karxana açmaq lazımdır.

Bundan əlavə, səkkiz dəfə çox mühəndis tapmaq lazım olacaq, bəlkə də mühəndis məktəbləri açmaq, çertyojları, həndəsəni və yazıları standartlaşdırmaq lazım gələcək. Qısası, əsl başağrısı…

Piramidaların tikintisindən ötən minlərlə il ərzində heç nə dəyişməyib — insanlar hələ də daha çox işi daha az vaxtda necə görmək barədə düşünürlər. Kompüterlər ixtira edildikdən sonra isə bu problem üzərində insanlığın ən yaxşı beyinləri çalışıblar.

Proqramı on dəfə daha sürətli necə yerinə yetirmək olar? Elə bil qəribə sualdır — əgər prosessor artıq maksimum sürətlə işləyirsə, yəqin ki, heç cür. Amma mən boşuna demədim ki, bəşəriyyətin ən yaxşı beyinləri bu məsələyə baxıblar. Onlar bütün proqramların işini analiz ediblər və nəticə olaraq, inkişaf üçün üç böyük istiqamətin olduğunu görüblər.

Boş durma hallarını aradan qaldırmaq

Məlum oldu ki, proqramların böyük bir qismi boş dayanır. O, daim nəyisə gözləyir: məlumatların yaddaşın bir yerindən digərinə köçürülməsini, sərt diskin yaddaşa yüklənməsini, serverin sorğuya cavabını, istifadəçidən məlumat daxil edilməsini və s.

Bütün bu işləri mərkəzi prosessor deyil, yaddaş kontrollerləri, disk və s. yerinə yetirir. Mərkəzi prosessor isə bu vaxtı başqa bir faydalı işlə doldura bilərdi. Beləcə, bir prosessorda yalnız bir komanda icra axını (thread) yox, bir neçəsini işə salmaq ideyası yarandı.

Məsələn, bir thread istifadəçidən məlumat daxil edilməsini gözləyərkən, ikinci şəbəkədən nəyisə yükləyir, üçüncüsü məlumatları işləyir, dördüncüsü ekran görüntülərini çəkir. Daha sonra bu vəziyyət asinxron tapşırıqlar və korutinalar formasına keçir, amma bu barədə daha sonra danışacağıq.

Daha çox proqram

Əgər proqramlar vaxtlarının 80%-ni boş dayanırsa, bu əlbəttə yaxşı deyil. Amma digər tərəfdən, bütün proqramları yenidən yazmaq olmaz. Ola bilsin ki, bu problemi başqa cür həll etmək olar — kompüterdə sadəcə bir neçə proqramı eyni vaxtda işə salmaq olar.

Bu halda əməliyyat sistemi proqramların işini izləyir və əgər proqram boş vəziyyətdədirsə, onun iş vaxtını başqa bir proqrama ötürür. Bu dəyişiklik saniyədə onlarla dəfə baş verir və istifadəçi bu keçidləri ümumiyyətlə hiss etmir — onun baxışına görə proqramlar eyni anda icra edilir.

Daha çox prosessor

Proqramların eyni vaxtda icrası superdir, amma əgər proqramlar çoxdursa, onların boş dayanma halları azdırsa? Boş vaxt yoxdursa — səmərəli istifadə də yoxdu. Məsələn, bizdə yalnız hesablamalar aparan on proqram var ya da resurs tələb edən bir oyun başqa nəsə ilə birlikdə işləyir.

Bu problemi həlli üçün prosessora bir neçə prosessor əlavə etmək qərarına gəldilər. Qarışıqlığın qarşısını almaq üçün onları nüvələr adlandırdılar. İndi bizim bir neçə nüvəsi (alt-prosessoru) olan prosessorlarımız var, bunlarda bir neçə proqram paralel işləyə bilir.

Maraqlı fakt! Prosessorların nüvə sayı

Bugünkü gündə server prosessorlarının nüvə sayı 64-dən 256-ya qədər ola bilər, bəzi xüsusi hallarda hətta daha çox. Məsələn, AMD EPYC 4-cü nəsil prosessorlar 96 nüvə təklif edir, IBM POWER10 isə çip başına 240 nüvəyə malik ola bilər. İstifadəçi prosessorları da xeyli inkişaf edib: yüksək performanslı masa üstü CPU-lar, məsələn, AMD Threadripper, 64 nüvəyə qədər ola bilər, daha geniş yayılmış modellər adətən 6 ilə 16 nüvə arasında olur.

Sonra nə? Daha çox! Birincisi, bir server ana kartına bir neçə prosessor, məsələn, iki və ya dörd dənə quraşdırmaq olar. İkincisi, serverləri 10-20 ədəd server stendlərində birləşdirmək olar. Server stendlərini isə minlərlə olan data-mərkəzlərində birləşdirirlər.

Paylanmış sistemlər və mikroservis arxitekturaları müasir proqram təminatı inkişafında geniş yayılan praktika olub. Google, Amazon, Netflix kimi böyük şirkətlər və hətta daha kiçik müəssisələr çoxlu məlumatların işlənməsini, yüksək mövcudluğu və xidmətlərin genişlənməsini təmin etmək üçün paylanmış sistemlərdən istifadə edir. Bu sistemlər bir yerdə vahid bir qurum kimi işləyən bir çox server resurslarını səmərəli istifadə etməyə imkan verir ki, bu da tətbiqlərin məhsuldarlığını və dayanıqlığını xeyli artırır.

1.2 Üstünlüklər

Çoxaxınlılıq, ya da proqram daxilində tapşırıqların eyni vaxtda yerinə yetirilməsi, bir neçə əsas üstünlük təqdim edir ki, bunlar proqram təminatının məhsuldarlığını və effektivliyini əhəmiyyətli dərəcədə artıra bilər. Gəlin çoxaxınlılığın əsas üstünlüklərini nəzərdən keçirək.

1. Performansın və işləmə sürətinin artırılması

Tapşırıqların paralel yerinə yetirilməsi: Çoxaxınlılıq eyni vaxtda bir neçə tapşırığı yerinə yetirməyə imkan verir ki, bu da xüsusilə müstəqil əməliyyatların çox olduğu proqramlar üçün faydalıdır. Bu, proqramın sürətini artırmağa imkan verir, çünki tapşırıqlar paralel olaraq bütün mövcud prosessor resurslarından istifadə etməklə həyata keçirilir.

Çoxnüvəli prosessorlardan istifadə: Müasir prosessorlar bir neçə nüvəyə malikdir və çoxaxınlılıq axınları müxtəlif nüvələr arasında paylayaraq tapşırıqları paralel yerinə yetirməklə onların gücündən tam istifadə etməyə imkan verir.

2. İstifadəçi ilə qarşılıqlı əlaqənin və cavabvermə qabiliyyətinin yaxşılaşdırılması

Fon tapşırıqları: Çoxaxınlılıq uzunmüddətli ya da resurs tələb edən əməliyyatları fon rejimində yerinə yetirməyə imkan verir, eyni zamanda əsas axını istifadəçi interfeysindən cavabdeh saxlayır. Bu, istifadəçi təcrübəsini yaxşılaşdırır, çünki ağır tapşırıqlar yerinə yetirilərkən interfeys bloklanmır.

Asinxron əməliyyatlar: İstifadəçi ilə qarşılıqlı əlaqə və hadisələrin işlənməsi əsas tapşırıqların yerinə yetirilməsinə paralel olaraq baş verə bilər ki, bu da tətbiqləri daha cavablı və effektiv edir.

3. Sistem resurslarının effektiv istifadəsi

Resursların optimizasiyası: Çoxaxınlılıq sistem resurslarından, məsələn, prosessor vaxtı və yaddaş daha effektiv istifadə etməyə imkan verir. Bu, xüsusilə serverlər və yüksək performanslı hesablama sistemləri üçün vacibdir, burada çoxaxınlılıq bir çox sorğu və tapşırığı eyni vaxtda emal etməyə imkan verir.

Giriş-çıxış idarəsi: Çoxaxınlı tətbiqlər giriş-çıxış tapşırıqlarını (məsələn, şəbəkə əməliyyatları, faylları oxuma və yazma) daha effektiv idarə edə bilər, belə ki, bir axın giriş-çıxış əməliyyatının tamamlanmasını gözlədiyi halda digər tapşırıqları yerinə yetirə bilər.

4. Çoxtapşırıqlılığı dəstəkləmək

Çoxtapşırıqlılıq: Çoxaxınlılıq bir proses çərçivəsində bir neçə tapşırığı eyni vaxtda yerinə yetirməyə imkan verir ki, bu da veb serverlər, verilənlər bazaları və real vaxt tətbiqləri kimi çoxtapşırıqlılıq tələb edən tətbiqlərin hazırlanmasını asanlaşdırır.

Məlumatların paralel işlənməsi: Böyük həcmli məlumatların işlənməsi ilə bağlı tapşırıqlarda, çoxaxınlılıq məlumatları hissələrə bölmək və onları paralel şəkildə işləməyə imkan verir, bu da tapşırığı əhəmiyyətli dərəcədə sürətləndirir.

Çoxaxınlılığın istifadəsinə nümunələr

Veb serverlər: Çoxaxınlılıq veb serverlərə çoxsaylı istifadəçi sorğusunu eyni vaxtda emal etməyə imkan verir, serverlərin məhsuldarlığını və genişlənmə qabiliyyətini artırır.

Qrafik istifadəçi interfeysləri (GUI): Qrafik interfeysə malik tətbiqlərdə, uzunmüddətli hesablama proseslərinin fon rejimində yerinə yetirilməsi ilə interfeysi cavabyanımı saxlamağa imkan verir.

Elmi hesablama: Çoxaxınlılıq elmi hesablama zamanı məlumatların paralel işlənməsi üçün istifadə olunur, bu da mürəkkəb hesablama tapşırıqlarını yerinə yetirməyi əhəmiyyətli dərəcədə sürətləndirir.

Oyunlar və simulyasiyalar: Oyunlarda, çoxaxınlılıq eyni vaxtda fizika, qrafika, səslər və istifadəçi hərəkətlərini emal etməyə imkan verir, performansı və realizmi artırır.

1.3 Düzgün adlandırma

«Çox axınlılıq» adına iradlar var. Bu ad iki sözdən ibarətdir: «çox» və «axın», sanki proqram daxilində bir çox «əmrləri icra edən axınlar» olduğunu göstərir.

Gözəl bir bənzətmədir, amma ingilis (orijinal) ədəbiyyatında paralel yerinə yetirilən bir neçə əməliyyatlar üçün «ip» (thread) termini istifadə olunur. Və buna uyğun olaraq, çox axınlılıq orada multi-threading şəklində səslənir.

Bu kiçik bir səhv hesab oluna bilərdi - kimə nə fərqi var, əgər müxtəlif terminlərin başqa dilə çevrilməsi proqramlaşdırmada fəal istifadə olunan stream kimi bir şey olmasaydı, hansı ki, «axın» kimi tərcümə edilə bilməz.

Buna görə, hazırda azərbaycanca terminologiyada bəzi qarışıqlıqlar mövcuddur ki, onları iki yolla həll edirlər:

  • Thread (ip) - «əmrlərin icra axını» kimi tərcümə olunur.
  • Stream (axın) - «məlumat axını» kimi tərcümə olunur.

Digər tərəfdən, bir çox proqramçılar sadəcə terminləri tərcümə etmədən ingilis dilində istifadə etməyə başladılar:

  • Thread (ip) - «tred» kimi, multi-threading isə «malti-treding» kimi tələffüz olunur.
  • Stream (axın) - «strim» kimi tələffüz olunur.

Thread tez-tez ip adlandırılır, amma «çox-ipli» termini heç vaxt dilimizdə yer almadı. Buna görə söhbətlərdə həm «ip», həm də «çox axınlılıq» eyni vaxtda istifadə olunur.

Çox saylı mənimsənilən terminlərin istifadəsi dili daha zəngin edir, sözləri yeni mənalarla doldurmağa imkan verir və digər ölkələrdən həmkarlarla ünsiyyəti asanlaşdırır. Mən tam olaraq bu yanaşmanın tərəfdarıyam.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION