Runtime
Runtime bahasa Go adalah infrastruktur inti untuk eksekusi program Go, bertanggung jawab untuk mengelola alokasi memori, garbage collection, penjadwalan goroutine, pemantauan sistem, dan fungsi kunci lainnya. Berbeda dengan bahasa lain, runtime Go terintegrasi erat dengan kode pengguna, yang memungkinkan Go mencapai pemrograman konkuren yang efisien dan manajemen memori otomatis.
Komponen Inti
Runtime Go terutama terdiri dari beberapa komponen inti berikut:
Scheduler GMP
Scheduler GMP adalah salah satu komponen paling inti dari runtime Go, bertanggung jawab untuk menjadwalkan sejumlah besar goroutine ke jumlah terbatas thread sistem untuk dieksekusi. GMP masing-masing mewakili:
- G (Goroutine): Goroutine, thread ringan di Go
- M (Machine): Thread sistem, thread eksekusi tingkat sistem operasi
- P (Processor): Processor, berisi sumber daya yang diperlukan untuk menjalankan kode Go
Desain scheduler GMP memungkinkan Go untuk secara efisien mendukung ribuan goroutine konkuren, adalah batu loncatan untuk fitur konkurensi tinggi bahasa Go.
Alokator Memori
Alokator memori Go bertanggung jawab untuk mengelola alokasi memori heap, desainnya sangat dipengaruhi oleh TCMalloc Google. Fitur utamanya meliputi:
- Desain cache multi-level, mengurangi kompetisi lock
- Mengadopsi strategi alokasi yang berbeda berdasarkan ukuran objek
- Secara otomatis memutuskan apakah objek dialokasikan di stack atau heap
Alokator memori bekerja sama erat dengan garbage collector, bersama-sama mengimplementasikan manajemen memori yang efisien.
Garbage Collector
Go mengadopsi algoritma garbage collection Concurrent Mark-Sweep, fitur utamanya:
- Algoritma penandaan tiga warna
- Teknologi write barrier untuk garbage collection konkuren
- Latensi rendah, sebagian besar waktu STW di bawah 100 mikrodetik
Garbage collector Go telah dioptimalkan selama bertahun-tahun, sudah dapat memenuhi kebutuhan performa sebagian besar skenario bisnis.
Monitor Sistem
Monitor sistem (sysmon) adalah thread monitor independen, bertanggung jawab untuk:
- Preempt goroutine yang berjalan dalam waktu lama
- Memeriksa apakah perlu memicu garbage collection
- Memantau status sistem dan做出 penyesuaian yang sesuai
Ia berjalan terus-menerus di latar belakang, menjamin stabilitas program Go.
Saran Pembelajaran
Disarankan untuk belajar pengetahuan terkait runtime sesuai urutan berikut:
- Pertama pelajari Scheduler GMP, pahami mekanisme penjadwalan goroutine
- Kemudian pelajari Alokator Memori, pahami bagaimana memori dialokasikan
- Kemudian pelajari Garbage Collector, pahami bagaimana memori dikembalikan
- Terakhir pelajari Monitor Sistem, pahami mekanisme pemantauan后台 runtime
