Python (bahasa) tidak memerlukan GIL (itulah sebabnya ia dapat dengan sempurna diimplementasikan pada JVM [Jython] dan .NET [IronPython], dan implementasi tersebut multithread secara bebas). CPython (implementasi yang populer) selalu menggunakan GIL untuk kemudahan pengkodean (terutama pengkodean mekanisme pengumpulan sampah) dan integrasi perpustakaan kode-C yang tidak aman untuk thread-code (dulu ada satu ton dari yang ada di sekitar; -).
Proyek Unladen Swallow , di antara tujuan ambisius lainnya, memang merencanakan mesin virtual bebas-GIL untuk Python - mengutip situs itu, "Selain itu, kami bermaksud untuk menghapus GIL dan memperbaiki keadaan multithreading dengan Python. Kami percaya ini adalah mungkin melalui penerapan sistem GC yang lebih canggih, sesuatu seperti IBM Recycler (Bacon et al, 2001). "
JVM (setidaknya hotspot) memang memiliki konsep yang mirip dengan "GIL", itu hanya jauh lebih baik dalam granularity kunci, sebagian besar berasal dari GC di hotspot yang lebih maju.
Dalam CPython itu satu kunci besar (mungkin tidak benar, tetapi cukup baik untuk argumen), di JVM itu lebih menyebar tentang dengan konsep yang berbeda tergantung di mana ia digunakan.
Lihatlah, misalnya, vm / runtime / safepoint.hpp dalam kode hotspot, yang secara efektif merupakan penghalang. Setelah di safepoint seluruh VM telah berhenti berkaitan dengan kode java, seperti VM python berhenti di GIL.
Di dunia Jawa peristiwa VM seperti itu dikenal sebagai "stop-the-world", pada titik-titik ini hanya kode asli yang terikat pada kriteria tertentu yang berjalan bebas, dan sisanya dari VM telah dihentikan.
Juga kurangnya kunci kasar di java membuat JNI jauh lebih sulit untuk menulis, karena JVM membuat lebih sedikit jaminan tentang lingkungannya untuk panggilan FFI, salah satu hal yang cpython buat cukup mudah (walaupun tidak semudah menggunakan ctypes).
sumber
Ada komentar di bawah ini di posting blog ini http://www.grouplens.org/node/244 yang mengisyaratkan alasan mengapa mudah sekali mengeluarkan GIL untuk IronPython atau Jython, karena CPython menggunakan penghitungan referensi sedangkan 2 VM lainnya memiliki pemulung.
Mekanisme persisnya mengapa ini tidak saya dapatkan, tetapi itu terdengar seperti alasan yang masuk akal.
sumber
Di tautan ini mereka memiliki penjelasan berikut:
... "Bagian dari Penerjemah bukan threadsafe, meskipun sebagian besar karena menjadikannya semua threadsafe dengan penggunaan kunci besar akan memperlambat single-threaded sangat ( sumber ). Ini tampaknya terkait dengan pengumpul sampah CPython menggunakan penghitungan referensi (JVM dan CLR tidak, dan karena itu tidak perlu mengunci / merilis penghitungan referensi setiap waktu). Tetapi bahkan jika seseorang memikirkan solusi yang dapat diterima dan mengimplementasikannya, perpustakaan pihak ketiga masih akan memiliki masalah yang sama. "
sumber
Python tidak memiliki jit / aot dan kerangka waktu yang ditulis di prosesor multithreaded tidak ada. Atau Anda dapat mengkompilasi ulang semua yang ada di Julia lang yang tidak memiliki GIL dan meningkatkan kecepatan pada kode Python Anda. Jenis Jython juga menyebalkan lebih lambat dari Cpython dan Java. Jika Anda ingin tetap menggunakan Python pertimbangkan untuk menggunakan plugin paralel, Anda tidak akan mendapatkan peningkatan kecepatan instan tetapi Anda dapat melakukan pemrograman paralel dengan plugin yang tepat.
sumber