Sobes.tech
Junior — Middle

Kanalın uzunluğunu təyin etmədən sistemdə nə baş verəcək?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da kanal yaratarkən onun uzunluğunu göstərməsəniz, bu zaman buffersiz (unbuffered) kanal yaradılır. Bu cür kanal aşağıdakı xüsusiyyətlərə malikdir:

  • Göndərmə (chan <-) başqa bir goroutine tərəfindən kanaldan dəyər oxunana qədər bloklanır.
  • Qəbul (<- chan) kanala dəyər göndərilənə qədər bloklanır.

Bu, göndərmə və qəbul əməliyyatlarının birbaşa goroutine-lər arasında sinxronlaşdırıldığı və sərt sinxronizasiya təmin etdiyi anlamına gəlir.

Buffersiz kanal yaratma nümunəsi:

ch := make(chan int) // uzunluq göstərilməyib, buffersiz kanal

// Göndərmə və qəbul sinxronizasiyaya qədər bloklanacaq

Əgər bloklanmadan asinxron göndərmə lazımdırsa, buffer uzunluğu göstərilməlidir, məsələn:

ch := make(chan int, 10) // 10 elementlik buffer

Nəticədə, kanal yaradarkən uzunluğun göstərilməməsi, kanalın sinxron rejimdə işləyəcəyini göstərir.