Global interpreter lock: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
k Bot: Migrasi 1 pranala interwiki, karena telah disediakan oleh Wikidata pada item d:Q5570451 |
Rescuing 3 sources and tagging 0 as dead.) #IABot (v2.0.9.5 |
||
(6 revisi perantara oleh 4 pengguna tidak ditampilkan) | |||
Baris 1:
{{Orphan|date=Februari 2023}}
'''Global interpreter lock''' ('''GIL''') atau dalam [[bahasa]] [[Indonesia]] disebut sebagai '''Kunci Penerjemah Global''' merupakan mekanisme yang digunakan dalam bahasa komputer berbasis [[penerjemah (komputasi)|penerjemahan (interpreter)]] untuk menyinkronisasikan eksekusi serangkaian [[thread|utas (thread)]] sehingga hanya satu utas yang dieksekusi dalam satu waktu. Keberadaan GIL yang membatasi eksekusi yang dilakukan program penerjemah hanya satu utas dalam satu waktu ini juga berlaku saat aplikasi dijalankan dalam sistem berbasis multi-prosesor, keberadaan ini menjadikan aplikasi penerjemah tidak dapat memanfaatkan secara penuh kapabilitas prosesor yang ada. Beberapa program penerjemah populer yang memiliki GIL adalah [[Python (bahasa pemrograman)|Python]]<ref>{{cite web
| url=http://www.ddj.com/linux-open-source/206103078?pgno=2
Baris 7 ⟶ 9:
| quote=''The GIL is a lock that is used to protect all the critical sections in Python. Hence, even if you have multiple CPUs, only one thread may be doing "pythony" things at a time.''
| date=2008-02-03
| accessdate=2008-07-12
| accessdate=2008-07-12}}</ref><ref>[https://docs.python.org/api/threads.html Python/C API Reference Manual: Thread State and the Global Interpreter Lock]</ref> dan [[Ruby (bahasa pemrograman)|Ruby]].▼
| archive-date=2008-06-26
| archive-url=https://web.archive.org/web/20080626014054/http://www.ddj.com/linux-open-source/206103078?pgno=2
| dead-url=no
▲
Namun dalam hal ini, beberapa implementasi berbasis JVM (Jython, JRuby) ataupun CLR (IronPython, IronRuby) dalam hal ini tidak memiliki implementasi GIL tersebut, meski dalam hal ini hal tersebut berarti implementasinya tidak akan bisa memanfaatkan sejumlah besar pustaka yang dimiliki implementasi bahasa induk, namun pada umumnya hal tersebut tergantikan dengan kekayaan pustaka yang dimiliki java ataupun .NET.
== Latar belakang teknis ==
GIL merupakan kunci ataupun mutex yang dimiliki oleh [[thread|
Aplikasi yang berjalan dalam implementasi penerjemahan yang memiliki GIL sebaiknya memanfaatkan mekanisme process (komputasi) untuk memungkinkan pemanfaatan kapabilitas multi prosesor secara penuh, dan tidak melalui pemanfaatan utas (thread). Dengan demikian, setiap proses akan memiliki satu sesi penerjemahan dan satu GIL yang tidak terkait antara satu dengan lainnya, tidak pula berbagi data antara masing-masing proses-nya. Apabila dikehendaki mekanisme berbagi data global, maka hal tersebut bisa dilakukan dengan memanfaatkan aplikasi caching external seperti [[memcached]], [[redis]] atau lainnya.
== Keuntungan dan kerugian ==
Penggunaan GIL dalam bahasa pemrograman secara efektif membatasi pemanfaatan paralelisasi komputasi dalam satu sesi penerjemahan yang memanfaatkan beberapa utas/multi-utas. Jika sebuah program sepenuhnya terdiri atas kode yang ditulis dalam bahasa penerjemahan dan tidak melakukan pemanggilan fungsi ataupun prosedur di luar program penerjemah dalam waktu yang lama, akan sangat kecil kemungkinan peningkatan unjuk kerja yang bisa diraih dalam mekanisme seperti ini. Dan pula, disebabkan mekanisme sinyalisasi switching eksekusi yang berbasis jumlah [[p-code]], performa eksekusi akan menurun secara drastis apabila dijalankan pada mesin yang memanfaatkan multi-prosesor ataupun multi-core, lebih rendah bila dibandingkan unjuk kerje eksekusi pada mesin berbasis single prosesor/single-core.<ref>{{cite web | url=http://www.dabeaz.com/python/GIL.pdf | title=Inside the Python GIL | author=David Beazley | publisher=[http://chipy.org/ Chicago Python User Group] | date=2009-06-11 | location=Chicago | accessdate=2009-10-07 | archive-date=2010-12-24 | archive-url=https://web.archive.org/web/20101224201032/http://www.dabeaz.com/python/GIL.pdf | dead-url=no }}</ref>
Beberapa alasan pemanfaatan kunci ini adalah:
Baris 26 ⟶ 32:
Untuk mekanisme sistem yang memanfaatkan multi-utas, sangat disarankan untuk melakukan pemanggilan eksternal dengan cara membuat modul-modul yang bersifat kritis dalam bahasa aras bawah seperti [[C (bahasa pemrograman)|C]], [[Bahasa perakit]], atau lainnya. Hal ini disebabkan pemanggilan aras bawah memiliki mekanisme untuk melepaskan kunci GIL tersebut sehingga penerjemah bisa memanfaatkannya untuk mengeksekusi task yang lain.
Pada rilis-rilis terbaru, metode yang lebih baik dalam implementasi switching eksekusi telah diperbaiki, tidak lagi menggunakan jumlah p-code, melainkan berbasis waktu (micro-timer) sehingga memungkinkan eksekusi dalam mesin berbasis multi-prosesor secara lebih baik, meski dalam hal ini tidak dimaksukan untuk menghilangkan keberadaan GIL tersebut sama sekali.<ref>{{cite web | url=http://www.dabeaz.com/python/NewGIL.pdf | title=Inside the new GIL | author=David Beazley | publisher=[http://chipy.org/ Chicago Python User Group] | access-date=2015-10-06 | archive-date=2023-02-08 | archive-url=https://web.archive.org/web/20230208155729/http://www.dabeaz.com/python/NewGIL.pdf | dead-url=no }}</ref>
== Rujukan ==
{{Reflist|2}}
{{Authority control}}
[[Kategori:Bahasa pemrograman]]
|