Sobes.tech
Senior

Mis juhtub, kui käivitame 5 triljonit goroutine'i? Kuidas optimeerida?

sobes.tech AI

Vastus AI-lt

Launching 5 trillion goroutines is not feasible in practice due to memory and resource limitations of the operating system. Goroutines are lightweight, but each requires a stack (~2KB by default), which will lead to memory exhaustion.

What will happen:

  • Memory will quickly run out, and the program will crash with an error.
  • Performance will significantly decrease due to context switching.

How to optimize:

  • Use a worker pool, limiting the number of goroutines running simultaneously.
  • Divide tasks into smaller batches and process them sequentially or in parallel with control over the number of goroutines.
  • Use channels for load management and synchronization.
  • Review the logic: perhaps such a high level of parallelism is not necessary.

Example of a goroutine pool:

const workerCount = 100
jobs := make(chan Job)

for i := 0; i < workerCount; i++ {
    go func() {
        for job := range jobs {
            process(job)
        }
    }()
}

for _, job := range allJobs {
    jobs <- job
}
close(jobs)

This way, we control the number of goroutines and prevent resource exhaustion.