Junior — Middle
Жалпы каналдын узундугун аныктоосуз системада эмне болот?
sobes.tech AI
AIден жооп
Goда канал түзүүдө анын узундугун көрсөтпөсөңүз, ал буферсиз (unbuffered) канал түзүлөт. Мындай канал төмөнкү өзгөчөлүктөргө ээ:
- Жөнөтүү (
chan <-) башка goroutine каналдан маанини окуганга чейин блоктолот. - Алып салуу (
<- chan) каналга маанини жөнөтүүдө блоктолот.
Бул операциялар түздөн-түз goroutineдердин ортосунда синхрондоштурулат, катуу синхрондоштуруу камсыз кылынат.
Буферсиз канал түзүү мисалы:
ch := make(chan int) // узундук көрсөтүлгөн эмес, буферсиз канал
// Жөнөтүү жана алуу синхрондоштуруу үчүн блоктолот
Эгер блоктогус асинхрон жөнөтүү керек болсо, буфердин узундугун көрсөтүү керек, мисалы:
ch := make(chan int, 10) // 10 элементтүү буфер
Жыйынтыктап айтканда, канал түзүүдө узундук көрсөтүлбөсө, ал синхрон режимде иштейт.