Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Artikel yang memperkenalkan mekanisme kutipan sampah dan parameternya di Golang

Artikel yang memperkenalkan mekanisme kutipan sampah dan parameternya di Golang

PHPz
PHPzasal
2023-04-27 09:08:021193semak imbas

Golang ialah bahasa pengaturcaraan yang sangat popular dengan satu siri ciri cemerlang termasuk pengurusan memori yang cekap. Di Golang, Pengumpulan Sampah (GC) digunakan untuk melaksanakan pengurusan memori, membantu pembangun mengelakkan masalah seperti kebocoran memori dan memaksimumkan penggunaan sumber yang ada.

Walau bagaimanapun, secara lalai, mekanisme kutipan sampah Golang tidak sesuai sepenuhnya untuk semua senario. Terutamanya dalam aplikasi besar, prestasi dan kecekapan mekanisme pengumpulan sampah boleh terjejas dengan ketara. Untuk meningkatkan kecekapan dan masa tindak balas kutipan sampah, Golang membenarkan pembangun melaraskan mekanisme kutipan sampah melalui satu siri tetapan untuk menyesuaikan diri dengan senario yang berbeza.

Artikel ini akan memperkenalkan mekanisme kutipan sampah dan parameternya di Golang, serta cara menetapkan parameter kutipan sampah.

Mekanisme kutipan sampah

Kutipan sampah merujuk kepada mengimbas secara automatik blok memori yang tidak lagi digunakan dalam program dan melepaskan memori semasa program sedang berjalan. Mekanisme kutipan sampah Golang terutamanya mempunyai ciri-ciri berikut:

  1. Pemungut sampah berjalan secara berkala. Apabila bilangan objek dalam timbunan mencapai ambang tertentu, pemungut sampah dicetuskan. Memandangkan permulaan pemungut akan menyebabkan aplikasi berhenti berjalan, Golang mereka bentuk berbilang pengumpul sampah untuk dijalankan secara bergilir-gilir untuk mengurangkan masa jeda aplikasi dengan mengurangkan masa bekerja pemungut sampah tunggal.
  2. Pengumpul sampah Golang menggunakan tanda serentak untuk kitar semula. Semasa proses mengimbas ingatan timbunan, berbilang benang digunakan untuk menandakan dan mengitar semula ingatan timbunan untuk meningkatkan kecekapan.
  3. Pengumpul sampah direka bentuk untuk berhenti seketika semasa beberapa saat sibuk aplikasi. Pengumpul sampah Golang boleh dikonfigurasikan untuk mengelakkan kutipan sampah pada masa kritikal.

Parameter kutipan sampah

Golang menyediakan satu siri parameter kutipan sampah yang boleh digunakan untuk melaraskan gelagat mekanisme kutipan sampah untuk menyesuaikan diri dengan senario yang berbeza. Mari perkenalkan parameter ini di bawah.

GOGC

Parameter GOGC digunakan untuk mengawal masa pencetus kutipan sampah. Ia menentukan apabila, selepas kitaran peruntukan pantas, aplikasi akan dijeda untuk menjalankan pemungut sampah. Secara lalai, nilai parameter GOGC ialah 100, yang bermaksud bahawa apabila nisbah objek hidup kepada objek sampah dalam program mencapai 100%, pemungut sampah akan dimulakan untuk pembersihan.

Nisbah ini boleh dilaraskan dengan menetapkan nilai GOGC untuk menyesuaikan diri dengan senario yang berbeza. Contohnya, jika GOGC=50 ditetapkan, apabila nisbah objek aktif pada timbunan mencapai 50%, pemungut sampah akan dicetuskan. Meningkatkan nilai GOGC boleh mengurangkan bilangan GC dan mengurangkan penggunaan CPU, tetapi ia akan membawa kepada pertumbuhan memori timbunan yang lebih cepat dan kemungkinan kebocoran memori.

GODEBUG

GODEBUG ialah pembolehubah persekitaran yang boleh digunakan untuk mengawal parameter penyahpepijatan masa jalan Golang. Menetapkan GODEBUG membolehkan pembangun menyesuaikan parameter kutipan sampah, contohnya:

  • GODEBUG="gctrace=1": membenarkan merekod maklumat masa jalan apabila kutipan sampah dicetuskan, termasuk permulaan mekanisme kutipan sampah . masa dan masa tamat, dan menunjukkan urutan yang menjalankan kod pemungut sampah.
  • GODEBUG="gcstoptheworld=1": Hentikan coroutine lain daripada berlari untuk melaksanakan pemungut sampah.

Fungsi berkaitan GC

Di Golang, anda boleh menggunakan ruang nama masa jalan/nyahpepijat yang disediakan oleh pakej masa jalan untuk mendedahkan beberapa fungsi berkaitan gc. Pembangun boleh menggunakan fungsi ini untuk mendapatkan dan menetapkan parameter gc untuk mengoptimumkan lagi prestasi kod, contohnya:

  • runtime/debug.FreeOSMemory(): secara aktif mencetuskan GC dan melepaskan memori melahu.
  • runtime.ReadMemStats(): boleh membantu pembangun melihat maklumat seperti bilangan goroutine yang boleh menggantung pemungut sampah.
  • runtime.SetMaxStack(): boleh membantu pembangun menukar saiz tindanan maksimum goroutine.

Cara menetapkan parameter kutipan sampah

Untuk menetapkan parameter kutipan sampah di Golang, terdapat dua kaedah:

1 🎜>

Pembangun boleh menambah pembolehubah persekitaran pada skrip permulaan aplikasi untuk menetapkan parameter kutipan sampah. Contohnya:

$ env GOGC=200 ./myapp
Ini akan menetapkan parameter GOGC kepada 200. Tetapan ini hanya akan digunakan pada arahan permulaan dan tidak akan menjejaskan arahan lain.

2. Laraskan parameter kutipan sampah secara manual dalam kod

Pembangun boleh melaraskan parameter kutipan sampah dengan menggunakan fungsi yang disediakan dalam pakej runtime/debug dalam kod, contohnya:

import (
    "runtime/debug"
)

func main() {
    debug.SetMaxStack(1000000)
}
Ini akan menetapkan saiz tindanan maksimum goroutine kepada 1000000 bait.

Perlu diambil perhatian bahawa apabila melaraskan parameter, pembangun harus memilih nilai parameter dengan berhati-hati. Tetapan parameter yang terlalu kecil akan mengurangkan prestasi dan kecekapan mekanisme pengumpulan sampah, manakala tetapan parameter yang terlalu besar boleh menyebabkan masalah seperti kebocoran memori.

Ringkasan

Golang menyediakan satu siri parameter kutipan sampah untuk melaraskan gelagat mekanisme kutipan sampah untuk menyesuaikan diri dengan senario yang berbeza. Dalam aplikasi besar, penalaan halus parameter ini boleh menjadi cara penting untuk mengoptimumkan prestasi kod. Pembangun boleh mencapai kawalan terperinci ke atas pengumpul sampah dengan menetapkan parameter GOGC, menggunakan pembolehubah persekitaran GODEBUG atau memanggil fungsi dalam pakej masa jalan/nyahpepijat.

Atas ialah kandungan terperinci Artikel yang memperkenalkan mekanisme kutipan sampah dan parameternya di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn