Sobes.tech
Junior

Gorutinalar ilə iş parçaları (threadlər) arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Gorutinalar aşağıdakı əsas aspektlərdə iplərdən (threadlər) fərqlənir:

  • İdarəetmə: Gorutinalar Go icra mühiti tərəfindən idarə olunur, iplər isə əməliyyat sisteminin idarə edir. Bu, gorutinalar arasında keçidi çox daha yüngül və sürətli edir, çünki nüvə kontekstinin dəyişdirilməsi tələb olunmur.
  • Xərclər: Gorutinaların yaradılması və idarə olunması ip ilə müqayisədə çox az resurs (yaddaş və vaxt) tələb edir. Gorutina çox kiçik yastıqla (bir neçə kilobayt) başlayır və ehtiyac olduqda dinamik olaraq böyüyə və ya kiçilə bilər, iplər isə sabit, çox vaxt daha böyük yastıqla işləyir.
  • Miqyaslama: Aşağı xərclər sayəsində, bir tətbiqdə yüz minlərlə və ya hətta milyonlarla gorutina asanlıqla yaradıla bilər, eyni sayda ip yaratmaq isə sistem resurslarını tez tükədər.
  • Planlaşdırma: Go planlayıcısı çox sayda gorutinaları daha az sayda əməliyyat sistemi ip-ə çoxlayır. Bu, gorutinalar arasında kooperativ çoxlu vəzifə yerinə yetirməyi (bir ipdə, preemption elementləri ilə birlikdə) həyata keçirir, əməliyyat sistemi ip-ləri isə əməliyyat sistemi planlayıcısı tərəfindən idarə olunur və preemptiv çoxlu vəzifə yerinə yetirməyi dəstəkləyir.
Aspekt Gorutinalar İplər (Threadlər)
İdarəetmə Go icra mühiti Əməliyyat sistemi
Xərclər Aşağı (yaddaş, vaxt) Yüksək (yaddaş, vaxt)
Miqyaslama Çox yüksək Sistem resursları ilə məhdudlaşdırılmış
Planlaşdırma Go planlayıcısı (kooperativ) OS planlayıcısı (preemptiv)
Yastıq Dinamik, kiçik Sabit, çox vaxt böyük

Gorutina yaratma nümunəsi:

package main

import (
	"fmt"
	"time"
)

func vəzifə(id int) {
	fmt.Printf("Gorutina %d başladı\n", id)
	time.Sleep(time.Second)
	fmt.Printf("Gorutina %d bitdi\n", id)
}

func main() {
	go vəzifə(1) // Gorutina yaradılması
	go vəzifə(2) // Başqa gorutina yaradılması

	time.Sleep(2 * time.Second) // Gorutinaların tamamlanmasını gözləyirik
	fmt.Println("Əsas gorutina tamamlandı")
}