Perubahan utama di Python 3.13
- CPython v3.13.0 dijadwalkan dirilis pada 7 Oktober 2024
- Versi ini mencakup dua perubahan utama yang dapat sangat memengaruhi performa Python
- Versi "free-threaded" yang memungkinkan Global Interpreter Lock (GIL) dinonaktifkan
- Dukungan kompilasi Just-in-Time (JIT) yang bersifat eksperimental
Global Interpreter Lock (GIL)
Apa itu GIL?
- Python dirancang dan diimplementasikan sebagai bahasa interpreter single-thread pada akhir 1980-an oleh Guido Van Rossum
- Python mengompilasi source code menjadi bytecode, lalu interpreter mengeksekusinya
- Python menggunakan global lock (GIL) agar objek dapat diakses dengan aman dari semua thread
- Ini adalah lock mutual exclusion global yang mencegah beberapa thread mengeksekusi bytecode secara bersamaan
- Ini membatasi penggunaan shared memory, tetapi baik untuk performa single-thread
Mengapa Python memiliki GIL
- Pada awal 1990-an, sebagian besar program bersifat single-thread, dan performa single-core meningkat pesat
- Tidak perlu mengorbankan performa single-thread demi keamanan multi-thread
- Banyak core tetap bisa dimanfaatkan dengan menggunakan multi-process (modul
multiprocessing)
Mengapa sekarang GIL dihapus?
- Para pengembang inti Python sudah lama ingin menghapus GIL, tetapi hal itu tidak terlaksana karena kekhawatiran penurunan performa single-thread
- Kini, karena multicore sudah menjadi hal umum, keterbatasan multithreading akibat GIL menjadi masalah
- Proyek "Faster CPython" yang didukung Microsoft berkontribusi pada peningkatan performa Python
- Sam Gross mengusulkan implementasi tanpa GIL, dan PEP 703 pun diadopsi
- Rencana adopsi bertahap: opsi eksperimental → dukungan resmi → mode default
- Dengan latar belakang ini, rencana penghapusan GIL secara bertahap disetujui
Bagaimana performanya?
- Jika free-threading diaktifkan, performa single-thread turun sekitar 20%
- Multithreading dengan GIL dinonaktifkan menunjukkan peningkatan performa yang signifikan
- Multithreading dengan GIL aktif lebih lambat daripada single-threading
- Multithreading dengan GIL dinonaktifkan menunjukkan performa yang mirip dengan multiprocessing
Bagaimana cara menggunakan Python free-threading?
- Dengan menginstal Python 3.13.0rc2t lewat pyenv, Anda dapat menggunakan versi free-threading
- Secara default GIL dinonaktifkan, dan GIL dapat diaktifkan kembali saat runtime dengan '-X gil=1'
- Jika mengimpor modul yang tidak mendukung GIL free, GIL akan otomatis diaktifkan
Kompiler JIT (Just-in-Time)
Apa itu JIT?
- Berbeda dari kompilasi ahead-of-time tradisional, ini adalah teknik yang menghasilkan machine code tepat sebelum eksekusi
- Sebelum Python 3.13, bytecode dieksekusi dengan mengubahnya menjadi machine code satu per satu
- Dengan hadirnya JIT, bytecode dapat diubah menjadi machine code sekaligus dan diperbarui bila perlu
- Teknik yang diperkenalkan di Python 3.13 adalah JIT "copy-and-patch", yang mem-patch bytecode yang cocok dengan template yang telah ditentukan sebelumnya menjadi native code
- Kompiler JIT yang lebih maju dapat mengoptimalkan area "hot" yang sering dieksekusi
Dampak JIT seperti apa?
- Dalam jangka pendek, tidak akan ada perubahan besar pada cara menulis atau menjalankan kode Python
- Namun, diharapkan akan ada peningkatan performa bertahap sehingga dapat bersaing dengan bahasa lain
Bagaimana cara menggunakan JIT?
- Di Python 3.13, JIT masih eksperimental dan tidak diaktifkan secara default
- Bisa diaktifkan saat build dengan opsi 'PYTHON_CONFIGURE_OPTS="--enable-experimental-jit"'
- Saat runtime, status aktifnya dapat dikendalikan dengan 'PYTHON_JIT=0/1'
Kesimpulan
- Python 3.13 adalah rilis besar yang memperkenalkan konsep dan fitur baru yang menarik ke runtime
- Penghapusan GIL dan hadirnya JIT menandai perubahan penting
- Dalam jangka pendek mungkin belum ada perubahan besar, tetapi dalam jangka panjang akan berdampak positif pada performa Python
- Seiring free-threading dan JIT makin matang, keduanya diperkirakan akan sangat memengaruhi performa, terutama pada pekerjaan yang CPU-bound
Opini GN⁺
- Update Python 3.13 kali ini tampaknya akan membawa perubahan besar pada ekosistem Python. Dengan penghapusan GIL, bottleneck multithreading diharapkan teratasi, dan dengan hadirnya JIT, kecepatan eksekusi secara keseluruhan diperkirakan akan meningkat.
- Namun, perubahan ini akan membutuhkan waktu hingga benar-benar stabil. Masalah kompatibilitas pada paket yang sudah ada seperti C extension dapat muncul, dan saat menulis program multithreading, bug baru seperti race condition juga bisa terjadi.
- Kecepatan Python yang lambat selama ini sering disebut sebagai kekurangannya, dan diharapkan pembaruan kali ini dapat memperbaiki persepsi tersebut. Jika Python tetap memiliki keunggulan produktivitas dan keterbacaan, lalu ditambah performa, bahasa ini akan digunakan lebih luas lagi.
- Meski demikian, secara mendasar tetap ada keterbatasan sebagai bahasa bertipe dinamis. Upaya untuk membawa keunggulan bahasa bertipe statis juga perlu terus dilakukan. Menurut pandangan ini, hal tersebut bisa diatasi sampai tingkat tertentu dengan memanfaatkan secara aktif type hinting dan Cython yang baru-baru ini diperkenalkan ke Python.
- Secara keseluruhan, Python 3.13 tampaknya akan membawa perubahan yang menarik dan positif. Diharapkan para developer memahami dan memanfaatkan perubahan ini dengan baik untuk membuat program Python yang lebih baik
3 komentar
Baik penghapusan GIL maupun JIT, meski saat ini dampaknya mungkin masih kecil, merupakan perkembangan yang sangat penting dan dapat mengubah arah Python. Sangat menarik menantikan masa depan Python yang akan melepaskan cap buruk sebagai 'bahasa paling lambat' dan digunakan di lebih banyak bidang ke depannya.
Pentingnya free threading (penghapusan GIL) sudah dirangkum dengan baik di PEP 703, bersama berbagai pendapat dari banyak orang.
Selain itu, menurut PEP tersebut, penurunan performa pada single-thread hanya sekitar 5~6%, jadi sulit rasanya menerima klaim dalam artikel itu dan beberapa komentar hn yang menyebut ada penurunan performa 20~50%. Juga tidak ada sumber yang bisa diverifikasi.
Opini Hacker News
Ada pendapat bahwa menghapus GIL akan membuat program Python pada umumnya menjadi lebih lambat dan meningkatkan kompleksitas
Ada keluhan bahwa versi dengan JIT aktif tidak bisa diunduh
Ada pendapat bahwa ini mirip dengan sajak "Jack and Jill went up the hill"
Ada pengalaman bahwa pada program kecil yang memakai memori sedikit dan berjalan singkat, mematikan garbage collection sangat meningkatkan kecepatan
Ada pendapat bahwa ini adalah ringkasan yang bagus bagi orang-orang yang tidak puas dengan penjelasan saat diskusi pertama tentang penghapusan GIL pada 2021
Muncul pertanyaan apakah benar-benar mustahil mengoptimalkan kasus tanpa GIL
Ada kabar bahwa tanggal rilis berubah dari 2 Oktober menjadi 7 Oktober
Ada pendapat bahwa penurunan kinerja nogil dikutip sebesar 20%, tetapi bisa mencapai 50%
Ada pendapat bahwa judulnya mengejutkan
Ada pertanyaan yang mencari tautan ke pekerjaan terbaru tentang paralelisasi otomatis