Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara kurangkan gc dalam golang

Cara kurangkan gc dalam golang

王林
王林asal
2023-05-10 11:09:06670semak imbas

Golang ialah bahasa pengaturcaraan yang dilancarkan oleh Google. Kelebihannya terletak pada prestasi serentak yang cekap, sintaks minimalis dan mekanisme pengumpulan sampah yang berkuasa. Pengumpulan sampah adalah ciri penting Golang Ia membolehkan pengaturcara tidak bimbang tentang kitar semula memori dan boleh memberi tumpuan kepada pelaksanaan logik perniagaan. Walau bagaimanapun, kutipan sampah juga membawa beberapa masalah, yang terbesar adalah masalah prestasi yang disebabkan oleh GC. Jadi, bagaimana untuk mengurangkan overhed GC dengan berkesan? Perkara berikut akan dibincangkan berdasarkan kes sebenar.

  1. Gunakan jenis nilai apabila boleh

Di Golang, pembolehubah boleh dibahagikan kepada jenis nilai dan jenis rujukan. Jenis nilai termasuk int, float, bool, dsb., dan jenis rujukan termasuk tatasusunan, kepingan, peta, dsb. Tidak seperti bahasa lain, jenis nilai dalam Golang diluluskan dengan menyalin semasa proses pemindahan. Ini bermakna jika pembolehubah jenis nilai dihantar ke fungsi, fungsi tersebut akan menerima salinan pembolehubah tersebut. Jenis rujukan menghantar rujukan kepada data asas. Ini boleh menyebabkan ingatan luput dengan mudah dan GC kerap.

Oleh itu, gunakan jenis nilai dan bukannya jenis rujukan apabila boleh. Sebagai contoh, gunakan tatasusunan dan bukannya kepingan dan gunakan struct biasa dan bukannya peta. Ini boleh mengurangkan kekerapan peruntukan memori dan kutipan sampah.

  1. Elakkan menggunakan pembolehubah global

Pembolehubah global ialah salah satu pembolehubah yang paling kerap digunakan dalam atur cara. Walau bagaimanapun, penggunaan pembolehubah global akan meningkatkan beban GC. Sebabnya ialah kitaran hayat pembolehubah global adalah selagi program yang tidak digunakan lagi akan sentiasa menempati ruang memori, menyebabkan kutipan sampah tidak dapat mengitar semula pembolehubah yang tidak digunakan ini, sekali gus mengurangkan. prestasi program.

Oleh itu, kita harus mengelak daripada menggunakan pembolehubah global sebanyak mungkin. Jika anda mesti menggunakan pembolehubah global, anda harus mengurangkan bilangan dan kitaran hayatnya sebanyak mungkin, yang boleh mengurangkan beban GC.

  1. Menggunakan sync.Pool

sync.Pool ialah kolam yang disediakan dalam pustaka standard Golang untuk menyimpan objek sementara. Apabila program berjalan, jika sebilangan besar objek atau blok memori perlu dibuat, menggunakan penyegerakan.Kolam boleh mengurangkan bilangan peruntukan memori dan mengurangkan tekanan kutipan sampah.

Sebagai contoh, semasa memproses permintaan http, setiap permintaan perlu mencipta objek ResponseWriter dan Request. Jika anda menggunakan sync.Pool untuk mencipta objek ini, anda boleh mengurangkan bilangan peruntukan memori, dengan itu mengurangkan beban pada GC.

  1. Gunakan penyegerakan.Peta daripada pustaka standard

Di Golang, peta ialah struktur data yang cekap yang boleh digunakan untuk menyimpan pasangan nilai kunci. Walau bagaimanapun, anda perlu berhati-hati apabila menggunakan peta, terutamanya dalam persekitaran konkurensi tinggi. Oleh kerana peta tidak selamat untuk benang, penguncian diperlukan untuk memastikan keselamatan serentak, yang akan meningkatkan beban pada GC.

Oleh itu, kita boleh menggunakan sync.Map yang disediakan dalam pustaka standard. Struktur data ini selamat untuk benang dan boleh mengelakkan kebutiran kunci yang berlebihan atau operasi penguncian yang tidak perlu, dengan itu mengurangkan tekanan GC.

  1. Perhatikan kesan GC

Di Golang, pemungut sampah dicetuskan secara automatik, tetapi kerja pemungut sampah akan menyekat semua benang pengguna. Oleh itu, jika terdapat sejumlah besar peruntukan memori semasa pemungut sampah berjalan, ia akan mengambil masa yang lebih lama untuk pemungut sampah membersihkan sampah. Ini menyebabkan urutan pengguna disekat lebih lama, yang seterusnya menjejaskan prestasi program.

Oleh itu, kita perlu memberi perhatian khusus kepada kesan pemungut sampah dan mengelak daripada membuat peruntukan memori yang besar semasa operasi pemungut sampah.

Ringkasan:

Mekanisme kutipan sampah Golang merupakan kelebihan utama, membolehkan pengaturcara menumpukan pada pelaksanaan logik perniagaan. Walau bagaimanapun, kutipan sampah juga membawa beberapa masalah, yang terbesar adalah masalah prestasi yang disebabkan oleh GC. Artikel ini meringkaskan beberapa kaedah untuk mengurangkan overhed GC, seperti menggunakan jenis nilai, mengelakkan pembolehubah global, menggunakan penyegerakan.Kolam, menggunakan penyegerakan.Peta dalam perpustakaan standard dan memberi perhatian kepada kesan GC. Petua ini boleh membantu kami menggunakan mekanisme kutipan sampah dengan lebih baik semasa menulis program Golang, mengurangkan overhed GC program dan dengan itu meningkatkan prestasi program.

Atas ialah kandungan terperinci Cara kurangkan gc dalam 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