93 / 103

Goroutines

Goroutine'lar

Goroutine — Go ish vaqti (runtime) boshqaradigan yengil oqim (thread).

example.go
go f(x, y, z)

quyidagini bajaruvchi yangi goroutine ishga tushiradi:

example.go
f(x, y, z)

f, x, y va z ning hisoblanishi joriy goroutine'da ro'y beradi, f ning bajarilishi esa yangi goroutine'da.

Goroutine'lar bir xil manzil fazosida ishlaydi, shuning uchun umumiy xotiraga murojaat sinxronlashtirilishi kerak.

sync paketi foydali primitivlarni taqdim etadi, lekin Goda ularga ko'p ehtiyoj bo'lmaydi, chunki boshqa primitivlar mavjud. (Keyingi sahifaga qarang.)

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

Kvadratlar(sonlar []int) []int funksiyasini yozing: har bir sonning kvadratini alohida goroutine'da hisoblasin (har bir goroutine natijani natija slice'ining o'z indeksiga yozsin) va hammasi tugagach, natijani qaytarsin. Kutish uchun sync.WaitGroup dan foydalaning ("sync" paketini import qiling). Masalan, Kvadratlar([]int{1, 2, 3}) — [1 4 9].

2-topshiriq

IkkalasiniKut(f1, f2 func()) funksiyasini yozing: f1 va f2 ni bir vaqtda (ikki goroutine'da) ishga tushirsin va ikkalasi ham tugaguncha kutsin. Testda f1 f2 signal berguncha bloklanadi, shuning uchun ularni ketma-ket ishga tushirsangiz dastur qotib qoladi.