Վերադառնալ
Go concurrency distilled. անվճար մինի-գիրք Go-ի զուգահեռ ծրագրավորման մասին
SiTech AI Team2 წთ. საკითხავი

Go concurrency distilled. անվճար մինի-գիրք Go-ի զուգահեռ ծրագրավորման մասին

Անտոն Ժիյանովը հրապարակել է «Go concurrency distilled» անվճար մինի-գիրքը. սա Go-ում զուգահեռ ծրագրավորման արագ կրկնություն է, ոչ թե սկսնակների դասընթաց. goroutine-ներից ու channel-ներից մինչև context, mutex-ներ և դիագնոստիկա։

Go-ին նվիրված antonz.org բլոգի հեղինակ Անտոն Ժիյանովը սեպտեմբերի 26-ին հրապարակել է «Go concurrency distilled» անվճար մինի-գիրքը։ Հեղինակը ներկայացնում է այն որպես Go-ում զուգահեռ ծրագրավորման արագ կրկնություն, ոչ թե սկսնակների դասընթաց. զրոյից և գործնական վարժություններով սովորելու համար նախատեսված է նրա նախորդ՝ «Gist of Go: Concurrency» գիրքը։ Նոր գիրքը, հեղինակի խոսքով, գրվել է առանց AI-ի։

Ամբողջ տեքստը աշխատում է բրաուզերում ինտերակտիվ օրինակներով. յուրաքանչյուր հատվածի կոդը կարելի է փոխել ու գործարկել հենց էջում։ PDF տարբերակը GitHub-ի nalgeon/go-conc-distilled պահոցում է։

goroutine-ներից մինչև pipeline-ներ

Առաջին գլուխները ներկայացնում են հիմքերը. go բառով գործարկվող goroutine-ները, դրանք համաժամեցնող wait group-երը և channel-ները, որոնցով goroutine-ները միմյանց արժեքներ են փոխանցում՝ առանց բուֆերի և բուֆերով, փակ և nil տարբերակներով։ Հետո գալիս է select-ը՝ տվյալների հոսքերի կառավարման, goroutine-ների չեղարկման և ոչ արգելափակող գործողությունների համար։

Առանձին գլուխ նվիրված է pipeline-ներին, որտեղ ամեն քայլ կարդում է մի channel-ից և գրում մյուսում, և սխալների մշակմանը՝ վերադարձ առաջին սխալի դեպքում, պատասխանի ու սխալի միավորում մեկ արդյունքի տիպում կամ սխալների հավաքում առանձին channel-ում։

Ժամանակ, context և համաժամեցում

Ժամանակն առանձին գլուխ ունի. time.After՝ ժամկետների համար, timer-ներ՝ հետաձգված աշխատանքի համար և ticker-ներ՝ պարբերական առաջադրանքների համար. ցիկլում հեղինակը խորհուրդ է տալիս զրոյացնել մեկ timer, ոչ թե ամեն իտերացիայում նորը ստեղծել։ context-ը, որի նպատակը գործողությունները ձեռքով, ժամկետով կամ վերջնաժամկետով չեղարկելն է, ներկայացվում է իր շերտավոր կառուցվածքով. զավակ context-ը կարող է միայն կրճատել ծնողի վերջնաժամկետը, իսկ cancel-ի բազմաթիվ կանչերը անվտանգ են։ Նկարագրված են նաև չեղարկման սեփական պատճառները և context.AfterFunc-ով գրանցվող մաքրման ֆունկցիաները։

Հաջորդում են համաժամեցման պրիմիտիվները. wait group-երը Go-ի նոր մեթոդով, mutex-ները TryLock-ով և RWMutex-ով, սեմաֆորները, պայմանական փոփոխականները signal-ով և broadcast-ով, sync.Once-ը, sync.Pool-ը՝ աղբահավաքի ծանրաբեռնվածությունը նվազեցնելու համար, և ատոմիկ գործողությունները։ Հեղինակն ընդգծում է data race-ի, որը race detector-ը բռնում է -race դրոշով, և race condition-ի տարբերությունը, որը այն չի բռնում։

Թեստավորում, պլանավորում և դիագնոստիկա

Թեստերում գիրքը խորհուրդ է տալիս հենվել կոդի արդեն առաջարկած համաժամեցման կետերի վրա՝ channel-ներ կամ Wait մեթոդով տիպեր։ Որտեղ դրանք չկան, օգնում է synctest փաթեթը. թեստը կատարվում է կեղծ ժամացույցով մեկուսացված պղպջակում, ուստի ժամանակից կախված ստուգումները կատարվում են ակնթարթորեն։

Վերջին գլուխները նվիրված են պլանավորիչին, որը goroutine-ները բաշխում է ՕՀ-ի թելերի միջև (մի goroutine-ին պետք է մոտ 2 ԿԲ ստեկ), և արտադրական դիագնոստիկային. runtime/metrics փաթեթը, pprof պրոֆայլերը (CPU, heap, goroutine, block և mutex), go tool trace-ով հետագծումը և flight recording-ը՝ վերջին հետքի սահող պատուհանով։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։