Sobes.tech
Senior

What will happen if you run 5 trillion goroutines? How to optimize?

sobes.tech AI

Answer from AI

Running 5 trillion goroutines is practically impossible due to memory and OS resource limitations. Goroutines are lightweight, but each requires a stack (default ~2KB), 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 goroutine pool (worker pool), limiting the number of goroutines running simultaneously.
  • Break tasks into smaller batches and process them sequentially or in parallel with control over the number of goroutines.
  • Use channels to manage load and synchronization.
  • Reconsider the logic: perhaps, not so much parallelism is needed.

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)

Thus, controlling the number of goroutines helps avoid resource exhaustion.

What will happen if you run 5 trillion goroutines… - sobes.tech