Sobes.tech
Middle

Ի՞նչ տեսակների ալիքներ կան Go-ում: Խոսեք բուֆերային և բուֆերային չլինած ալիքների մասին։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, ալիքները (channels) հիմնականում երկու տեսակ են՝ բուֆերային և բուֆերային չլինող:

  • Բուֆերային չլինող ալիքներ՝ դա առանց ներքին բուֆերի ալիքներ են: Դրանց վրա տվյալ ուղարկումը բլոկվում է, մինչև որ մյուս goroutine-ները չկարդան արժեքը ալիքից, և հակառակը՝ ընթերցումը բլոկվում է, մինչև որ արժեքը հայտնվի: Սա ապահովում է սինխրոնիզացիա goroutine-ների միջև:

  • Բուֆերային ալիքներ ունեն ֆիքսված չափի ներքին բուֆեր: Տվյալ ուղարկումը բլոկվում է միայն այն ժամանակ, երբ բուֆերը լցված է, և ընթերցումը՝ երբ բուֆերը դատարկ է: Սա որոշակի անսինխրոնություն է թույլ տալիս ուղարկողի և ստացողի միջև:

Օրինակ ստեղծում և օգտագործում:

ch := make(chan int)         // բուֆերային չլինող ալիք
chBuf := make(chan int, 3)   // բուֆերային ալիք 3 տարրով

// Չլինող ալիք պահանջում է սինխրոնիզացիա:
ngo func() {
    ch <- 42 // բլոկվում է, մինչև որ մեկը կարդա
}()
արժեք := <-ch

// Բուֆերային ալիք թույլ է տալիս ուղարկել մինչև 3 տարր առանց բլոկավորման:
chBuf <- 1
chBuf <- 2
chBuf <- 3
// Երբ փորձեն ուղարկել 4-րդ տարր, այն բլոկվելու է, մինչև որ այն չկարդան

արժեքBuf := <-chBuf

Այսպիսով, ալիքների տեսակը ընտրելը կախված է սինխրոնիզացիայի և կատարողականության պահանջներից։