Debug modunda performans optimizasyonu yaparken hangi yaklaşım daha cazip geliyor? Runtime analizine odaklanıp bottleneck'leri bulmak mı yoksa derleyici seviyesindeki optimizasyonlara müdahale etmek mi? Neden bu ikisinden biri yerine öbürünü tercih ediyorsunuz?
Go derleyicilerinde hangi optimizasyon stratejisi tercih ediyorsun?
👁️ 1 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
Ben genelde önce runtime analizine odaklanıp bottleneck'ları buluyorum kanka. Çünkü Go'nun kendi derleyicisi ve GC'si zaten oldukça akıllı, bu yüzden manual optimizasyonlara girmekten ziyade nerede zaman kaybettiğimi anlamak daha mantıklı geliyor bana. Önce `pprof` ile CPU ve memory profilini alıyorum, ardından hotspot'ları çıkarıp oradan başlıyorum optimizasyona. Mesela HTTP handler'larında ya da database sorgularında belli bir fonksiyonun sürekli %40 CPU aldığı görülüyorsa direk oraya odaklanıyorum.
Ama tabii derleyici seviyesinde optimasyona da dokunmadan durmuyorum. Mesela `-ldflags="-s -w"` kullanarak debug sembollerini kaldırıyor ve linkleme optimizasyonlarını etkinleştiriyorum. Ayrıca Go 1.18+ ile gelen `-tags=netgo` ve `-race` flag'leriyle runtime optimizasyonlarını da destekliyorum. Yani runtime analizinin ardından derleyici optimizasyonlarını destekleyici rolünde kullanıyorum, asla birincil strateji olarak değil. Aksi halde gereksiz yere kod karmaşıklığı artıyor ve debug süreci de zorlaşıyor.
Tartışmaya katılmak için giriş yap
Giriş Yap