Posting ini dari pembuat Python, Guido Van Rossum, menyebutkan upaya awal untuk menghapus GIL dari Python:
Ini telah dicoba sebelumnya, dengan hasil yang mengecewakan, itulah sebabnya saya enggan berusaha keras untuk melakukannya sendiri. Pada tahun 1999 Greg Stein (dengan Mark Hammond?) Menghasilkan garpu Python (1,5 saya percaya) yang menghapus GIL, menggantikannya dengan kunci berbutir halus pada semua struktur data yang bisa berubah. Dia juga mengirimkan tambalan yang menghilangkan banyak ketergantungan pada struktur data global yang bisa berubah, yang saya terima. Namun, setelah benchmarking, ditunjukkan bahwa bahkan pada platform dengan primitif penguncian tercepat (Windows saat itu), memperlambat eksekusi single-threaded hampir dua kali lipat, yang berarti bahwa pada dua CPU, Anda bisa mendapatkan sedikit lebih banyak pekerjaan dilakukan tanpa GIL daripada pada CPU tunggal dengan GIL. Ini tidak cukup, dan patch Greg menghilang. (Lihat Langgan Greg pada kinerja.)
Saya hampir tidak dapat berdebat dengan hasil yang sebenarnya, tetapi saya benar-benar bertanya-tanya mengapa ini terjadi. Agaknya, alasan utama yang menghapus GIL dari CPython sangat sulit adalah karena referensi menghitung sistem manajemen memori. Program Python biasa akan memanggil Py_INCREF
dan Py_DECREF
ribuan atau jutaan kali, menjadikannya titik pertentangan utama jika kita ingin membungkus kunci di sekitarnya.
Tapi, saya tidak mengerti mengapa menambahkan primitif atom akan memperlambat program berulir tunggal . Misalkan kita baru saja memodifikasi CPython sehingga variabel refcount di setiap objek Python adalah sebuah atom primitif. Dan kemudian kita hanya melakukan peningkatan atom (mengambil dan menambah instruksi) ketika kita perlu menambah jumlah referensi. Ini akan membuat referensi Python menghitung thread-safe, dan seharusnya tidak memiliki penalti kinerja pada aplikasi single-threaded, karena tidak akan ada pertengkaran kunci.
Tapi sayangnya, banyak orang yang lebih pintar dari saya telah mencoba dan gagal, jadi jelas saya kehilangan sesuatu di sini. Apa yang salah dengan cara saya melihat masalah ini?