Menskalakan Kinerja asyncio di Python Tanpa GIL (Free-Threaded Python)
(labs.quansight.org)Kesimpulan
Pada build free-threaded Python 3.14, asyncio memungkinkan eksekusi paralel yang sesungguhnya dengan menghapus Global Interpreter Lock (GIL) dan beralih ke pengelolaan status per thread. Akibatnya, kinerja dapat diskalakan secara linear sesuai jumlah thread, sehingga beberapa event loop dapat dijalankan secara paralel dan membuka kemungkinan baru untuk aplikasi asyncio multithread berkinerja tinggi.
Perubahan utama
- Penghapusan GIL (Global Interpreter Lock): Build free-threaded CPython menghapus GIL sehingga beberapa thread dapat menjalankan kode Python secara bersamaan.
- Menjamin keamanan thread: asyncio memastikan keamanan thread dengan menggunakan pengelolaan status per thread alih-alih struktur data global.
- Penyimpanan task: Menggunakan daftar berantai ganda melingkar per thread sebagai pengganti
WeakSetglobal untuk menghilangkan kontensi lock dan overhead weak reference. - Penyimpanan task saat ini: Menyimpan "task saat ini" dalam status thread untuk memungkinkan akses yang lebih cepat dan tanpa lock.
- Penyimpanan task: Menggunakan daftar berantai ganda melingkar per thread sebagai pengganti
Peningkatan kinerja
- Skalabilitas kinerja linear: Hasil benchmark menunjukkan bahwa pada build free-threaded, kinerja asyncio meningkat secara linear seiring bertambahnya jumlah thread.
- Benchmark TCP: Dibandingkan dengan build yang GIL-nya aktif, build free-threaded menunjukkan peningkatan throughput yang signifikan.
- Benchmark web scraping: Dalam benchmark web scraping menggunakan aiohttp, penggunaan beberapa worker pada build free-threaded menghasilkan peningkatan kinerja lebih dari 2x.
Belum ada komentar.