For the complete documentation index, see llms.txt. This page is also available as Markdown.

Worker pools

Go dilində, worker pool'lar müəyyən bir işi yerinə yetirmək üçün təyin olunmuş işçi qrupudur. İşlər channel-a göndərilir və bu işlər işçilər tərəfindən emal olunur. Bu metod, paralel emal və işlərin işçilər arasında paylanması ilə iş yükünü balanslaşdırmağa kömək edir.

package main

import (
	"fmt"
	"time"
)

func worker(id int, jobs <-chan int, results chan<- int) {
	for j := range jobs {
		fmt.Println("Worker", id, "started job", j)
		time.Sleep(time.Second)
		fmt.Println("Worker", id, "finished job", j)
		results <- j * 2
	}
}

func main() {
	jobs := make(chan int, 100)
	results := make(chan int, 100)

	for w := 1; w <= 3; w++ {
		go worker(w, jobs, results)
	}

	for j := 1; j <= 5; j++ {
		jobs <- j
	}
	close(jobs)

	for a := 1; a <= 5; a++ {
		<-results
	}
}

Bu nümunədə, worker adlı bir funksiya yaradılır. Bu funksiya işçilər tərəfindən emal olunacaq işləri alır və nəticələri results kanalına geri qaytarır.

  • jobs adlı bir kanal yaradılır və bu kanal vasitəsilə 100-ə qədər iş yükləri göndərilə bilər.

  • results adlı başqa bir kanal yaradılır və 100 nəticə bu kanal vasitəsilə geri alına bilər.

İlk for dövrü ilə, 3 işçi üçün goroutine yaradılır. Hər işçi worker funksiyasını icra edərək, ona verilmiş işləri emal edir.

Növbəti for dövrü ilə, 5 iş göndərilir və bu işlər jobs kanalına daxil edilir. close funksiyası vasitəsilə jobs kanalı bağlanır.

Sonuncu for dövrü ilə, emal olunmuş nəticələr results kanalından alınır.

Output:

Bu nümunə, işlərin işçilər arasında necə paylanmasını və nəticələrin necə geri alındığını göstərir.

Last updated