Շատ սկսնակներ queue բառը լսելիս այն պատկերացնում են որպես վերացական, տեխնիկական և դժվար ընկալելի բան։
Բայց հիմնական գաղափարը շատ ծանոթ է։ Queue-ը պարզապես համակարգ է, որը բաները մշակում է հերթականությամբ՝ մեկը մյուսի հետևից, ոչ թե միանգամից բոլորը։ Եթե երբևէ հերթ եք կանգնել բանկում, սուպերմարկետում, օդանավակայանում կամ սրճարանում, արդեն հասկանում եք queue-ի հիմնական գաղափարը։
Առօրյա կյանքում հերթեր գոյություն ունեն, որովհետև պահանջարկը հաճախ ավելի արագ է գալիս, քան սպասարկումը կարող է կատարվել։ Շատ մարդիկ միաժամանակ ուզում են սպասարկվել, բայց համակարգը կարող է նրանց մշակել միայն հերթով կամ վերահսկված խմբերով։ Ծրագրերը մշտապես ունեն նույն խնդիրը։
Queue-ը վերահսկվող սպասում է
Queue-ը հասկանալու ամենապարզ ձևը սա է․ նոր աշխատանքը մտնում է հերթի վերջում, իսկ ավելի հինը սովորաբար մշակվում է առաջինը։ Սա է գաղափարի սիրտը։ Քաոսի փոխարեն համակարգը ստեղծում է կարգ։ Փոխարենը, որ ամեն ինչ միաժամանակ մրցի, առաջադրանքները սպասում են իրենց հերթին։
Սա կարևոր է, որովհետև շատ համակարգեր ստանում են ավելի շատ աշխատանք, քան կարող են անվտանգ մշակել հենց նույն պահին։ Email-ներ պետք է ուղարկվեն։ Առաջադրանքներ պետք է աշխատեն։ Notifications պետք է առաքվեն։ Նկարներ պետք է փոփոխվեն։ Վճարումներ պետք է ստուգվեն։ Հաշվետվություններ պետք է ստեղծվեն։ Queue-ը օգնում է համակարգին ասել․ «Ես ստացել եմ այս աշխատանքը։ Ես այն կմշակեմ հերթով»։
Պարզ առօրյա օրինակ
Պատկերացրեք հացատուն, որտեղ կա մեկ դրամարկղ։ Տասը մարդ գրեթե միաժամանակ մտնում է ներս։ Եթե բոլորը փորձեին նույն պահին վճարել, հարցեր տալ և սպասարկվել, արդյունքը շփոթություն կլիներ։ Հացատունը բնական queue է օգտագործում․ առաջին մարդը կանգնում է առաջինը, երկրորդը՝ նրա հետևում և այդպես շարունակ։ Դրամարկղավարը սպասարկում է հերթականությամբ։
Ծրագրավորման queue-երը լուծում են նույն տեսակի խնդիրը։ Դրանք թույլ են տալիս համակարգին ընդունել բազմաթիվ հարցումներ՝ առանց փորձելու դրանք նույն պահին խառն ձևով ավարտել։
Ինչու ծրագրերին այդքան հաճախ queue-եր են պետք
Ժամանակակից համակարգերը լի են առաջադրանքներով, որոնք պարտադիր չէ կատարվեն հենց այն վայրկյանին, երբ օգտատերը սեղմում է կոճակը։ Օրինակ՝
- գրանցումից հետո welcome email ուղարկել
- վերբեռնված տեսանյութեր մշակել
- invoice-ներ գեներացնել
- report-ներ ստեղծել
- push notification-ներ ուղարկել
- տվյալները sync անել մեկ այլ ծառայության հետ
Եթե հավելվածը փորձի այս ամենը անել անմիջապես օգտատիրոջ հարցման ընթացքում, պրոդուկտը կարող է դառնալ դանդաղ, փխրուն կամ ծանրաբեռնված։ Queue-ը թույլ է տալիս հավելվածին արագ պատասխանել՝ «քո հարցումը ստացվել է» — մինչ ծանր աշխատանքը կազմակերպված կերպով շարունակվում է ֆոնում։
Ինչով են queue-երը ուժեղ
Queue-ի ուժը միայն նրանում չէ, որ այն պահում է սպասող աշխատանքը։ Այն նաև օգնում է բաժանել ստացումը և մշակումը։ Համակարգը կարող է առաջադրանքը ընդունել հիմա, իսկ մշակել՝ քիչ ավելի ուշ։ Այս փոքր բաժանումը շատ օգտակար է։
Դա նշանակում է, որ կայքը կարող է մնալ արագ արձագանքող նույնիսկ այն ժամանակ, երբ շատ աշխատանք կա։ Դա նշանակում է, որ traffic-ի կտրուկ աճը միշտ չի կոտրում համակարգը։ Դա նշանակում է, որ աշխատանքը կարելի է կրկնել, եթե ինչ-որ բան ձախողվի։ Եվ դա նշանակում է, որ ծանր առաջադրանքները կարող են մշակվել առանձին worker-ների կողմից՝ առանց հիմնական օգտատիրոջ հոսքը կանգնեցնելու։
Queue-երը հաճախ արդարության և անվտանգության մասին են
Queue-ը միայն արագության մասին չէ։ Այն նաև արդարության, կանխատեսելիության և պաշտպանության մասին է։ Եթե հազար առաջադրանք միանգամից հասնի, queue-ը օգնում է կանխել, որ բոլորը միաժամանակ հարձակվեն նույն ռեսուրսի վրա։ Առանց այս վերահսկման համակարգերը կարող են դանդաղել, խափանվել կամ անկայուն աշխատել։
Շատ դեպքերում queue-երը օգնում են ծրագրերին հանգիստ մնալ ճնշման տակ։ Դրանք աշխատանքի սպասասրահի պես մի բան են։
Ինչ են ծրագրավորողները նկատի ունենում FIFO ասելով
Երբ queue-երը բացատրվում են, հաճախ կհանդիպեք FIFO արտահայտությանը՝ first in, first out։ Դա պարզապես նշանակում է, որ ամենահին տարրը սովորաբար մշակվում է ավելի նորերից առաջ։ Դա նույն տրամաբանությունն է, ինչ սովորական հերթում առօրյա կյանքում․ ով ավելի շուտ է եկել, սովորաբար պետք է ավելի շուտ սպասարկվի։
Ոչ բոլոր համակարգերն են բոլոր իրավիճակներում մաքուր FIFO օգտագործում, բայց սա ամենատարածված պատկերացումն է և ամենալավ մեկնարկային կետը queue-ի վարքը հասկանալու համար։
Ինչու queue-երը stacks չեն
Սկսնակները երբեմն queue-ը շփոթում են stack-ի հետ։ Queue-ը հերթի նման է՝ first in, first out։ Stack-ը ավելի շատ նման է ափսեների դարսի՝ last in, first out։ Այլ կերպ ասած՝ queue-ը առաջնահերթություն է տալիս ավելի հին տարրերին, իսկ stack-ը՝ ամենավերջում ավելացվածին։
Այս տարբերությունը կարևոր է, որովհետև կառուցվածքն ուղղակիորեն փոխում է համակարգի վարքը։ Queue-ը սովորաբար ընտրվում է, երբ կարգն ու արդարությունը կարևոր են։
Ինչու queue-երը կարևոր են նաև backend-ից դուրս
Backend ինժեներ լինել պետք չէ queue-երից օգուտ քաղելու համար։ Product manager-ները, հիմնադիրներն ու դիզայներները հաճախ մտածում են՝ ինչու որոշ գործողություններ կատարվում են անմիջապես, իսկ մյուսները ժամանակ են պահանջում։ Ինչո՞ւ report-ը «պատրաստվում է»։ Ինչո՞ւ video upload-ը ցույց է տալիս «processing»։ Ինչո՞ւ email-ը գալիս է մի քանի վայրկյան ուշ։ Շատ հաճախ պատասխանի մի մասը queue-ն է։
Երբ հասկանում եք queue-երը, շատ product վարքեր դադարում են պատահական թվալ։ Դուք սկսում եք տեսնել, որ ժամանակակից ծրագրերի մեծ մասը կախված է կառուցված սպասումից, ոչ թե ակնթարթային ավարտից։
Եզրակացություն
Queue-ը ծրագրերի համար աշխատանքի կազմակերպված հերթ է, ոչ թե քաոսային մրցակցություն։ Այն թույլ է տալիս համակարգերին ընդունել առաջադրանքներ, կազմակերպել դրանք և անվտանգ մշակել ժամանակի ընթացքում։ Երբ սա հասկանում եք, ծրագրավորման queue-ը դադարում է վերացական թվալ և սկսում է թվալ մի բան, որը դուք ամբողջ կյանքում արդեն ճանաչել եք։