Goroutines (101): Go ile Basit Eşzamanlılık (Concurrency)

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18

Milyonlarca İş Parçacığı​

Java veya C# gibi dillerde bir "Thread" oluşturmak maliyetlidir (yaklaşık 1MB RAM yer). Bu yüzden binlerce thread açarsanız sunucu çökebilir.Go'da ise Goroutine'ler vardır. Bunlar İşletim Sistemi thread'i değil, Go'nun kendi yönettiği süper hafif (başlangıçta 2KB) parçacıklardır. Tek bir sunucuda milyonlarca Goroutine çalıştırabilirsiniz.

go​

Bir fonksiyonun başına go yazdığınız anda, o fonksiyon ana akıştan kopar ve arka planda kendi başına çalışmaya başlar.

Kod:
package main

import ("fmt""time")

func ekranaYaz(mesaj string) {for i := 0; i < 5; i++ {fmt.Println(mesaj, i)time.Sleep(100 * time.Millisecond)}}

func main() {// Bu normal çalışır (Bitmesini bekleriz)// ekranaYaz("Normal")

// Bu bir Goroutine olarak çalışır (Beklemeyiz, hemen alt satıra geçer)<br>go ekranaYaz("Goroutine 1")<br><br>// Bu da başka bir Goroutine<br>go ekranaYaz("Goroutine 2")<br><br>// DİKKAT: Ana fonksiyon (main) bir Goroutine'dir.<br>// Eğer main biterse, diğer goroutine'lerin işi bitmese bile program kapanır.<br>// Bu yüzden şimdilik yapay bir bekleme koyuyoruz.<br>time.Sleep(1 * time.Second)<br>fmt.Println("Program Bitti")<br>
}

Sonuç​

Goroutine'ler ile aynı anda veritabanına yazabilir, e-posta gönderebilir ve kullanıcıya cevap verebilirsiniz. Ancak yukarıdaki time.Sleep yöntemi amatörcedir. Goroutine'lerin birbirini beklemesi ve konuşması için Channels ve WaitGroups kullanılır.
 
Geri
Üst