GoDasturchi
Introduction to Goroutines

Introduction to Goroutines

Goroutinalarga kirish

Shu paytgacha yozgan har bir dasturingiz ketma-ket ishladi: bir qator tugagach, keyingisi boshlandi. Goroutina — Go'ning yengil ip (thread)i, va uni ishga tushirish oson: har qanday funksiya chaqiruvi oldiga go kalit so'zini qo'yasiz.

example.go
func sayHello() {
    fmt.Println("Salom!")
}

func main() {
    go sayHello()          // yangi goroutinada ishga tushadi
    fmt.Println("Asosiy")  // dastur buni kutmaydi
}

go sayHello() chaqirilgan zahoti, main funksiyasi sayHelloning tugashini kutmasdan keyingi qatorga o'tadi. Shu sababli yuqoridagi dasturni ishga tushirsangiz, ba'zan "Salom!" chop etilishga ulgurmasdan main tugab, butun dastur yopilib qolishi mumkin — goroutina asosiy dastur bilan parallel, undan mustaqil ishlaydi.

Bu — Errors Are Values darsida ko'rgan "Go hech narsani sizdan yashirmaydi" falsafasining davomi: go kalit so'zi juda oddiy ko'rinsa-da, u sizga darhol muhim savol qo'yadi — "asosiy dastur qachon goroutina tugashini bilishi kerak?" Keyingi darsda aynan shu savolga sync.WaitGroup yordamida javob berasiz.

example.go
for i := 0; i < 3; i++ {
    go fmt.Println(i)
}
// Bu uchta goroutina qaysi tartibda (yoki umuman) chop etilishi
// kafolatlanmagan — goroutinalar mustaqil rejalashtiriladi.

Muhim xulosa: goroutinalar arzon (minglab goroutina yaratish oddiy funksiya chaqiruvidek yengil) va mustaqil rejalashtiriladi. Ular bilan ishlashning markaziy muammosi — natijalarni qachon va qanday xavfsiz yig'ib olish, va aynan shu narsa ushbu kursning qolgan darslarining mavzusi bo'ladi.

Key Takeaway

Key Takeaway:

go f() funksiyani yangi, mustaqil goroutinada ishga tushiradi va darhol qaytadi — asosiy dastur uning tugashini kutmaydi. Goroutinalar juda arzon, lekin ularning natijalarini xavfsiz kutish va yig'ish uchun maxsus vositalar (sync.WaitGroup, kanallar) kerak bo'ladi.

NEXT UP

WaitGroup: Coordinating Goroutines

Introduction to Goroutines

Goroutinalarga kirish

Shu paytgacha yozgan har bir dasturingiz ketma-ket ishladi: bir qator tugagach, keyingisi boshlandi. Goroutina — Go'ning yengil ip (thread)i, va uni ishga tushirish oson: har qanday funksiya chaqiruvi oldiga go kalit so'zini qo'yasiz.

example.go
func sayHello() {
    fmt.Println("Salom!")
}

func main() {
    go sayHello()          // yangi goroutinada ishga tushadi
    fmt.Println("Asosiy")  // dastur buni kutmaydi
}

go sayHello() chaqirilgan zahoti, main funksiyasi sayHelloning tugashini kutmasdan keyingi qatorga o'tadi. Shu sababli yuqoridagi dasturni ishga tushirsangiz, ba'zan "Salom!" chop etilishga ulgurmasdan main tugab, butun dastur yopilib qolishi mumkin — goroutina asosiy dastur bilan parallel, undan mustaqil ishlaydi.

Bu — Errors Are Values darsida ko'rgan "Go hech narsani sizdan yashirmaydi" falsafasining davomi: go kalit so'zi juda oddiy ko'rinsa-da, u sizga darhol muhim savol qo'yadi — "asosiy dastur qachon goroutina tugashini bilishi kerak?" Keyingi darsda aynan shu savolga sync.WaitGroup yordamida javob berasiz.

example.go
for i := 0; i < 3; i++ {
    go fmt.Println(i)
}
// Bu uchta goroutina qaysi tartibda (yoki umuman) chop etilishi
// kafolatlanmagan — goroutinalar mustaqil rejalashtiriladi.

Muhim xulosa: goroutinalar arzon (minglab goroutina yaratish oddiy funksiya chaqiruvidek yengil) va mustaqil rejalashtiriladi. Ular bilan ishlashning markaziy muammosi — natijalarni qachon va qanday xavfsiz yig'ib olish, va aynan shu narsa ushbu kursning qolgan darslarining mavzusi bo'ladi.

Key Takeaway

Key Takeaway:

go f() funksiyani yangi, mustaqil goroutinada ishga tushiradi va darhol qaytadi — asosiy dastur uning tugashini kutmaydi. Goroutinalar juda arzon, lekin ularning natijalarini xavfsiz kutish va yig'ish uchun maxsus vositalar (sync.WaitGroup, kanallar) kerak bo'ladi.

NEXT UP

WaitGroup: Coordinating Goroutines