İçeriğe geç
Muhammet Şafak
en

3 Ekim 2026

Go'da mutex mi, kanal mı? Çekişme altında ölçüm

Go 1.27'de sync.Mutex ve kanalları üç senaryoda, farklı goroutine ve P sayılarında ölçtük: hangisinin hızlı olduğu G ve P'ye bağlı.

Tan, elinde bir planla

Go · Eşzamanlılık · Ölçüm

Go'da mutex mi, kanal mı?

Paylaşılan durumu korumanın iki yolu, çekişme altında üç senaryoda ölçüldü. Kısa cevap yok: sonuç goroutine (G) ve P sayısına göre değişiyor.

Muhammet Şafak

Önce bağlam

Ölçüm ortamı ve güven düzeyi

  • Ortam Go 1.27.1 linux/arm64; Docker Engine 29.8.0, 12 vCPU, Apple M4 Pro. P değerleri cpuset ile ayrılmış vCPU gruplarıdır; konteyner ağsız, salt okunur, 4 GiB.
  • Güven düşük 845 hücrenin 518'i (%61,3) bayraklı; eşik %15. Hız ve gecikme oranları bayraksız hücrelerden; görselde anılan bayraklı hücre bayrağıyla işaretlendi.
  • Gecikme Gecikme değerleri logaritmik kovaların üst sınırıdır, kesin ölçüm değildir.

5×

Senaryo 1 · G=64, P=4

mutex'in p99 gecikmesi, tek yönlü kanala göre

Mutex p99 491.519 ns, tek yönlü kanal 98.303 ns. Throughput'ta fark %3,2 ve gürültü içinde: 7,69 M'ye karşı 7,94 M işlem/sn.

Senaryo 1 · G=64, P=8

P artınca tablo dönüyor

milyon işlem/sn

  • Mutex 15,96
  • Tek yönlü kanal 6,65
  • İstek-cevaplı kanal 3,97
Mutex tek yönlü kanaldan 2,40×, istek-cevaplı kanaldan 4,02× hızlı. P=4'ten P=8'e mutex 2,08 kat hızlandı, kanal 0,84 katına indi; nedeni ölçülmedi.

Senaryo 1 · G=10.000, P=8

Çok goroutine: hız ve adalet

Çok goroutine: hız ve adalet
Yöntem İşlem/sn Jain adalet indeksi Bayrak
Mutex 14.878.958 0,8237 (kıyas dışı) fairness_unexplained
Tek yönlü kanal 2.052.681 (7,25× yavaş) 0,9999 yok
İstek-cevaplı kanal 1.778.745 (8,36× yavaş) 1,0000 yok

Adalet sonucunu okurken

Mutex'in adaletsizliği açıklanamadı

  • Uyarı Doğru okuma “mutex daha adaletsiz” değil, “mutex hücresindeki adaletsizlik açıklanamıyor”. Hücre fairness_unexplained bayrağı taşıyor.
  • Not Kaynağın tasarım kuralı gereği bu bayrağı taşıyan hücreler modeller arası adalet kıyasına girmez. Mutex hücresi yalnız adalet bayrağı taşır; hız oranı geçerlidir.

Senaryo 2 · G=64, P=4

Okuma ağırlıklı yük

Okuma ağırlıklı yük
Okuma oranı Mutex Sahip-goroutine kanalı Fark
%50 9,86 M işlem/sn 4,42 M işlem/sn Mutex 2,23× hızlı
%90 12,23 M işlem/sn 4,58 M işlem/sn Mutex 2,67× hızlı

Senaryo 3 · G=64, P=4

Üretici-tüketici kuyruğu

milyon işlem/sn

  • Tamponu 1 olan kanal 6,91
  • Tamponsuz kanal 5,41
  • sync.Cond'lu kuyruk (tampon 1.024) 4,46
Tamponu 1 olan kanal tamponsuza göre 1,28×, sync.Cond'lu kuyruğa göre 1,55× hızlı. Tamponu 64 ve 1.024 olan kanal hücreleri bayraklı, dışarıda bırakıldı.

Bayraklı hücreler

Neyi iddiaya almadık

  • Senaryo 1 P=1 ve P=2 hücreleri bayraklı; bu P değerleri için sonuç yazılmadı.
  • Senaryo 2 %99 okuma hücresi bayraklı, oranı verilmedi. RWMutex hücreleri observer_effect bayrağı taşıyor.
  • Bayraklar fairness_unexplained 235, spread_p99 189, observer_effect 171, spread_throughput 125, calib_drift 72, spread_persistent 36.

Sınırlar

Bu ölçüm neyi söylemez

  • Uyarı Yük sentetik bir sayaçtır, üretim iş yükü değildir.
  • Not sync.Map ölçülmedi.
  • Not P değerleri sanal makine içindeki vCPU'lardır; fiziksel çekirdek değildir.
  • Not Farkların nedenleri ölçülmedi; görsel yalnız ne olduğunu gösterir.

Sonuç

“Hangisi daha hızlı?” sorusunun cevabı G ve P'ye bağlı.

Bu kayıt hangisinin daha hızlı olduğunu değil, hangisinin ne zaman hızlı olduğunu söylüyor. Nedenini bilmediğiniz bir davranışı üretimde varsaymayın, kendi P'nizde ölçün.

Paylaş ve indir

Paylaş:
Bu kodu sayfanızın HTML’ine yapıştırın.

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi