14 puan yazan GN⁺ 2024-09-29 | 3 yorum | WhatsApp'ta paylaş

Python 3.13'teki başlıca değişiklikler

  • CPython v3.13.0'ın 7 Ekim 2024'te yayımlanması planlanıyor
  • Bu sürüm, Python'ın performansını büyük ölçüde etkileyebilecek iki önemli değişiklik içeriyor
    • Global Interpreter Lock (GIL) devre dışı bırakılabilen "free-threaded" sürüm
    • Deneysel Just-in-Time (JIT) derleme desteği

Global Interpreter Lock (GIL)

GIL nedir?

  • Python, 1980'lerin sonlarında Guido Van Rossum tarafından tek iş parçacıklı bir yorumlayıcı dili olarak tasarlandı ve uygulandı
  • Python, kaynak kodu bytecode'a derler ve ardından yorumlayıcı bunu çalıştırır
  • Nesnelere tüm iş parçacıklarından güvenli şekilde erişmek için global lock (GIL) kullanır
    • Birden fazla iş parçacığının aynı anda bytecode çalıştırmasını engelleyen küresel karşılıklı dışlama kilididir
  • Paylaşılan bellek kullanımını sınırlar, ancak tek iş parçacıklı performans için olumludur

Python'da neden GIL var?

  • 1990'ların başında programların çoğu tek iş parçacıklıydı ve tek çekirdek performansı hızla artıyordu
  • Çok iş parçacıklı güvenlik için tek iş parçacıklı performanstan ödün vermek gerekmiyordu
  • Birden fazla çekirdeği kullanmak için çoklu süreçlerden yararlanılabiliyordu (multiprocessing modülü)

GIL neden şimdi kaldırılıyor?

  • Python çekirdek geliştiricileri uzun süredir GIL'i kaldırmak istiyordu, ancak tek iş parçacıklı performansın düşeceği endişesi nedeniyle bu gerçekleştirilemedi
  • Son dönemde çok çekirdekli sistemler yaygınlaştıkça, GIL'in çok iş parçacıklılığa getirdiği kısıtlar sorun haline geldi
  • Microsoft sponsorluğundaki "Faster CPython" projesi, Python performansının iyileştirilmesine katkı sağladı
  • Sam Gross, GIL'siz bir uygulama önerdi ve PEP 703 kabul edildi
  • Kademeli geçiş planı: deneysel seçenek → resmî destek → varsayılan mod
  • Bu arka plan doğrultusunda GIL'in aşamalı olarak kaldırılması planı onaylandı

Performans nasıl?

  • Free-threading etkinleştirildiğinde tek iş parçacıklı performans yaklaşık %20 düşüyor
  • GIL devre dışıyken çok iş parçacıklılık belirgin performans artışı gösteriyor
  • GIL etkinken çok iş parçacıklılık, tek iş parçacıklılıktan daha yavaş
  • GIL devre dışıyken çok iş parçacıklılık, çoklu süreç kullanımıyla benzer performans gösteriyor

Free-threading Python nasıl kullanılır?

  • pyenv ile Python 3.13.0rc2t kurulduğunda free-threading sürümü kullanılabilir
  • Varsayılan olarak GIL devre dışıdır; çalışma zamanında '-X gil=1' ile GIL yeniden etkinleştirilebilir
  • GIL free desteklemeyen bir modül import edilirse GIL otomatik olarak etkinleşir

JIT (Just-in-Time) derleyicisi

JIT nedir?

  • Geleneksel ahead-of-time derlemeden farklı olarak, çalıştırmadan hemen önce machine code üreten bir tekniktir
  • Python 3.13 öncesinde bytecode, tek tek machine code'a dönüştürülerek çalıştırılıyordu
  • JIT ile bytecode tek seferde machine code'a dönüştürülebilir ve gerektiğinde güncellenebilir
  • Python 3.13'te sunulan teknik, önceden tanımlı şablonlarla eşleşen bytecode'u native code'a yamalayan "copy-and-patch" JIT'tir
  • Daha gelişmiş JIT derleyicileri, sık çalıştırılan "hot" kod bölgelerini optimize edebilir

JIT'in etkisi ne olacak?

  • Kısa vadede Python kodu yazma veya çalıştırma biçiminde büyük bir değişiklik olmayacak
  • Ancak zaman içinde performansın kademeli olarak iyileşmesi ve diğer dillerle rekabet edebilmesi bekleniyor

JIT nasıl kullanılır?

  • Python 3.13'te JIT deneysel durumdadır ve varsayılan olarak etkin değildir
  • Derleme sırasında 'PYTHON_CONFIGURE_OPTS="--enable-experimental-jit"' seçeneğiyle etkinleştirilebilir
  • Çalışma zamanında 'PYTHON_JIT=0/1' ile etkinleştirme durumu kontrol edilebilir

Sonuç

  • Python 3.13, runtime'a ilgi çekici yeni kavramlar ve özellikler getiren büyük bir sürümdür
    • GIL'in kaldırılması ve JIT'in eklenmesi önemli değişimlerin habercisidir
  • Kısa vadede büyük değişimler olmayabilir, ancak uzun vadede Python performansı üzerinde olumlu etkiler yaratacaktır
    • Free-threading ve JIT olgunlaştıkça özellikle CPU-bound işlerde performans üzerinde büyük etkisi olması bekleniyor

GN⁺ görüşü

  • Bu Python 3.13 güncellemesinin Python ekosisteminde büyük değişiklikler yaratması bekleniyor. GIL'in kaldırılmasıyla çok iş parçacıklılığı darboğazlarının hafiflemesi, JIT'in eklenmesiyle de genel çalışma hızının artması bekleniyor.
  • Ancak bu değişimlerin tamamen kararlı hale gelmesi zaman alacaktır. C extension gibi mevcut paketlerde uyumluluk sorunları ortaya çıkabilir ve çok iş parçacıklı programlamada race condition gibi yeni hatalar görülebilir.
  • Python'ın yavaş olması uzun süredir bir dezavantaj olarak gösteriliyordu; bu güncellemeyle bu algının iyileşmesi umuluyor. Mevcut üretkenlik ve okunabilirlik avantajlarına hız da eklenirse Python daha da yaygın kullanılan bir dil haline gelebilir.
  • Buna rağmen, dinamik tipli bir dil olmasının getirdiği temel sınırlamalar hâlâ var. Statik tipli dillerin avantajlarını getirmeye yönelik çabaların da sürmesi gerekiyor. Python'a yakın zamanda eklenen type hinting ve Cython gibi araçlar etkin kullanılırsa bunun bir kısmı çözülebilir.
  • Özetle Python 3.13'ün ilgi çekici ve olumlu değişiklikler getirmesi bekleniyor. Geliştiricilerin bu değişimleri iyi anlayıp kullanarak daha iyi Python programları yazabilmesi umuluyor

3 yorum

 
ilotoki0804 2024-09-30

GIL’in kaldırılması ve JIT’in her ikisi de şu an için etkileri sınırlı görünse de, Python’un gidişatını değiştirecek çok önemli gelişmeler. “En yavaş dil” şeklindeki kötü şöhretini geride bırakıp gelecekte daha fazla alanda kullanılacak Python’un geleceği heyecan veriyor.

 
ilotoki0804 2024-09-30

Free threading'in (GIL'in kaldırılması) önemi, PEP 703 içinde çeşitli kişilerin görüşleriyle birlikte iyi şekilde özetlenmiş.
Ayrıca ilgili PEP'e göre tek iş parçacığında performans düşüşü yalnızca %5~6 civarında deniyor; bu yüzden söz konusu yazı ve bazı HN yorumlarında öne sürülen %20~50'lik performans düşüşü iddiasını ikna edici bulmak zor. Bunu doğrulayabilecek bir kaynak da yok.

 
GN⁺ 2024-09-29
Hacker News yorumu
  • GIL'in kaldırılmasının tipik Python programlarını yavaşlatacağı ve karmaşıklığı artıracağı görüşü

    • Gerçekte elde edilecek faydaya dair şüphe
    • Birden fazla CPU çekirdeğini sonuna kadar kullanmak gerektiğinde, işletim sisteminin programın birden çok örneğini çalıştırmasına izin verip paralelleştirme mantığını programa ekleme yaklaşımının kullanıldığı belirtiliyor
  • JIT etkin sürümün indirilememesine yönelik şikayet

    • Python 3.13'ü kendiniz derleyebilirsiniz, ancak birçok kişinin bunu denemediği ve geri bildirim vermediği yönünde bir deneyim paylaşılıyor
  • Bunun "Jack and Jill went up the hill" kafiyesine benzediği görüşü

    • "up the hill" ifadesinin ne anlama geldiği konusunda kafa karışıklığı yaşandığı belirtiliyor
    • JIT yayımlandı ama GIL gerçekten kaldırıldı mı diye soruluyor
  • Kısa süre çalışan ve az bellek kullanan programlarda çöp toplayıcıyı kapatmanın hızı ciddi biçimde artırdığına dair deneyim

    • Bunun otomatikleştirilip otomatikleştirilemeyeceği merak ediliyor
    • Küçük programların tüm belleği kullanabildiği uç durumların riskine değiniliyor
  • 2021'de GIL'in kaldırılmasına ilişkin ilk tartışmaların yapıldığı ve o dönemdeki açıklamalardan tatmin olmayanlar için bunun iyi bir özet olduğu görüşü

  • GIL'siz durumu optimize etmenin gerçekten imkansız olup olmadığı sorgulanıyor

    • %20 yavaşlamanın büyük bir sorun olduğu görüşü
  • Çıkış tarihinin 2 Ekim'den 7 Ekim'e değiştirildiği bilgisi

    • İlgili bağlantının paylaşıldığı belirtiliyor
  • nogil performans düşüşünün %20 olarak anıldığı, ancak %50'ye kadar çıkabileceği görüşü

    • JIT'in çok büyük bir fayda sağlamadığı noktası
    • Bunun CPython'ın sosyal ve kurumsal sorunlarını yansıtan hayal kırıklığı yaratan bir sürüm olduğu görüşü
    • Bazı kişilerin özellikler vaat ettiği, %100 istekli olmayanları susturduğu ve beklentilerin altında kalan sonuçlar ortaya çıkardığı ileri sürülüyor
  • Başlığın şaşırtıcı olduğu görüşü

  • Otomatik paralelleştirmeyle ilgili son çalışmanın bağlantısını arayan bir soru

    • Tek iş parçacıklı kod yazıp derleyicinin çok iş parçacıklı kod üretmesi yaklaşımına dair bir bağlantı paylaşılıyor