Sobes.tech
Junior — Middle

Ilovada bir vaqtning o'zida nechta goroutine ishga tushirilishi mumkin?

sobes.tech AI

AIdan javob

Go tilida bir vaqtning o'zida ishga tushiriladigan goroutinlarning maksimal soniga qat'iy cheklov yo'q. Teorik jihatdan, juda ko'p — o'nlab, yuzlab va hatto millionlab — ishga tushirilishi mumkin, tizim resurslariga (xotira, CPU) bog'liq.

Goroutinlar operatsion tizim iplariga nisbatan juda yengil, chunki ular ehtiyoj bo'lsa, o'sadigan dinamik stekdan foydalanadi.

Ammo, amaliy cheklov quyidagilarga bog'liq:

  • Mavjud xotira miqdori (har bir goroutin kamida bir necha kilobaytni egallaydi).
  • Ilova logikasi va goroutinlar o'rtasidagi sinxronizatsiya.
  • Go planlashtiruvchisiga yuk.

Ko'p sonli goroutinlarni ishga tushirish misoli:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    const n = 100000
    wg.Add(n)

    for i := 0; i < n; i++ {
        go func(i int) {
            defer wg.Done()
            // oddiy ish
            _ = i * 2
        }(i)
    }

    wg.Wait()
    fmt.Println("Barcha goroutinlar yakunlandi")
}

Shunday qilib, cheklov ko'proq amaliy, tizimli emas.