Lompat ke isi

Global interpreter lock: Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 23969842; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi
 
Baris 1: Baris 1:
'''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]] dan [[Ruby (bahasa pemrograman)|Ruby]].
'''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>Shannon -jj Behrens. [http://www.ddj.com/linux-open-source/206103078?pgno=2 Concurrency and Python]. Dr. Dobb's Journal. 2008-02-03. hlm. 2.</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]].


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.
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.
Baris 9: Baris 9:


== Keuntungan dan kerugian ==
== 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.
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>David Beazley. [http://www.dabeaz.com/python/GIL.pdf Inside the Python GIL]. [http://chipy.org/ Chicago Python User Group]. 2009-06-11.</ref>


Beberapa alasan pemanfaatan kunci ini adalah:
Beberapa alasan pemanfaatan kunci ini adalah:
Baris 18: Baris 18:
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.
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.
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>David Beazley. [http://www.dabeaz.com/python/NewGIL.pdf Inside the new GIL]. [http://chipy.org/ Chicago Python User Group].</ref>
 
== Rujukan ==
 


== Referensi ==
<references />


== Sumber dan atribusi ==
== Sumber dan atribusi ==


Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Global+interpreter+lock&oldid=23969842 Wikipedia bahasa Indonesia], revisi 23969842 (2023-08-06T17:41:50Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Global+interpreter+lock&oldid=23969842 Wikipedia bahasa Indonesia], revisi 23969842 (2023-08-06T17:41:50Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->

Revisi terkini sejak 23 Agustus 2026 04.06

Global interpreter lock (GIL) atau dalam bahasa Indonesia disebut sebagai Kunci Penerjemah Global merupakan mekanisme yang digunakan dalam bahasa komputer berbasis penerjemahan (interpreter) untuk menyinkronisasikan eksekusi serangkaian 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[1][2] dan Ruby.

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 utas (thread) bahasa pemrograman berbasis penerjemahan yang dimaksudkan untuk menghindari akses kode ilegal atas data yang berasal dari utas lainnya. Dalam implementasinya, sebuah program penerjemah memiliki satu GIL untuk setiap satu sesi penerjemahan.

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.[3]

Beberapa alasan pemanfaatan kunci ini adalah:

  • Peningkatan unjuk kerja untuk eksekusi aplikasi yang hanya memanfaatkan satu utas (single thread) karena tidak memerlukan mekanisme penguncian GIL secara terpisah.
  • Mudah diintegrasikan dengan bahasa lain, serta pustaka-pustaka yang umumnya belum dirancang untuk memanfaatkan utas
  • Mudah dalam pengimplementasian (Menulis program penerjemah yang memanfaatkan GIL jauh lebih sederhana dibandingkan program yang tidak memanfaatkan GIL, ataupun memanfaatkan penguncian tersistematis)

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 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.[4]

Referensi

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 23969842 (2023-08-06T17:41:50Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.