Junior — Middle
Чӣ тавр механизмии сабт дар канал бо дастрасии маҳдуд кор мекунад ва дар ин раванд чӣ рӯй медиҳад?
sobes.tech AI
Ҷавоб аз AI
Дар Go, канал бо иқтидори маҳдуд (канали бо буфер) дорои андозаи доимии буфер мебошад. Вақте ки маълумотҳоро бо амалиёти chan <- value ба канал менависем, ҳоло рӯй медиҳад:
- Агар дар буфери канали ҷойи холӣ бошад, арзиш ба буфер ҷойгир мешавад ва амали навишт фавран ба анҷом мерасад.
- Агар буфер пур бошад, амали навишт бозмедорад, то ки касе арзишро аз канали хонда, ҷойро холӣ кунад.
Ин тариқ, канал бо буфери маҳдуд ҳамоҳангсозиро байни горутинҳо таъмин мекунад: навишт дар ҳолати зиёдшавӣ бозмедорад, ва хондан дар ҳолати буфери холӣ.
Масалан:
ch := make(chan int, 2) // буфер барои 2 унсур
ch <- 1 // навишт, буфер: [1]
ch <- 2 // навишт, буфер: [1, 2]
// ch <- 3 // бозмедорад, зеро буфер пур аст
fmt.Println(<-ch) // 1-ро мехонад, буфер: [2]
ch <- 3 // ҳоло навишт муваффақ мешавад
Ин механизм, ки дар канали бо дастрасии маҳдуд навиштро таъмин мекунад, назорати ҷараёни маълумотро таъмин мекунад ва аз зиёдшавии буфер пешгирӣ мекунад.