golang mallocgc terlalu banyak

WBOY
Lepaskan: 2023-05-16 16:14:07
asal
593 orang telah melayarinya

Golang ialah bahasa pengaturcaraan yang sangat popular Ia diterima oleh semakin ramai pembangun untuk reka bentuk serentak yang cekap, sintaks yang mudah dipelajari dan kelajuan penyusunan yang pantas. Walau bagaimanapun, bagi sesetengah pengaturcara Golang, terdapat masalah yang sangat sukar: terlalu banyak MallocGC, menyebabkan program berjalan dengan tidak cekap.

Di Golang, pengurusan memori dilakukan oleh Garbage Collector (GC), yang sangat mengurangkan beban pengaturcara. Pengumpul sampah yang diperkenalkan oleh Golang menggunakan kaedah Mark and Sweep Ia mengimbas objek dalam ingatan, menandakan objek yang perlu dikitar semula, dan kemudian membersihkan objek yang tidak diperlukan. Kaedah ini digunakan secara meluas dalam bahasa pengaturcaraan lain, seperti Java, Python, dll., tetapi di Golang, pelaksanaannya berbeza daripada bahasa lain.

Mekanisme pencetus Golang GC adalah berdasarkan peruntukan memori objek dan saiz memori timbunan. Apabila peruntukan memori berlaku semasa pelaksanaan program, GC akan menentukan sama ada penggunaan memori semasa melebihi ambang tertentu memori timbunan Jika ia melebihi, GC akan dicetuskan. Sudah tentu ini juga antara masalah yang dihadapi oleh ramai pengaturcara Golang.

Di satu pihak, MallocGC berkait rapat dengan mekanisme kutipan sampah. Golang mewujudkan memori timbunan global berdasarkan semua M. Memori tindanan belakang ke belakang diperuntukkan untuk setiap Goroutine pada masa jalan Pengurusan memori tindanan diuruskan oleh setiap Goroutine. Apabila Goroutine perlu melepasi sempadan tindanan, ia melakukannya melalui mekanisme yang dipanggil "panggilan cgo".

Sebaliknya, disebabkan mekanisme peruntukan memori Golang, syarat untuk Malloc mencetuskan GC adalah agak kerap, dan proses GC melibatkan sejumlah besar operasi traversal dan salinan, yang boleh menyebabkan masalah dalam senario dengan mudah. di mana penggunaan memori adalah besar. Sebagai contoh, apabila sejumlah besar objek kecil atau sederhana diperuntukkan dan dikeluarkan dalam tempoh yang singkat, GC akan dicetuskan dengan kerap, sekali gus menjejaskan prestasi program.

Untuk menyelesaikan masalah ini, beberapa pengaturcara Golang telah mencadangkan beberapa penyelesaian:

  1. Gunakan penyegerakan.Pool: sync.Pool ialah teknologi pengumpulan yang disediakan oleh Golang yang boleh diulang Gunakan memperuntukkan objek untuk mengelakkan peruntukan yang kerap dan deallocation memori. Menggunakan penyegerakan.Kolam renang boleh mengurangkan kekerapan GC dengan banyak.
  2. Gunakan pengalokasi memori papak: papak ialah pengalokasi memori yang cekap yang pra-memperuntukkan blok memori yang besar dan membahagikannya kepada blok kecil, dan kemudian memperuntukkan blok kecil ini kepada Goroutine yang berbeza untuk digunakan, mengelakkan peruntukan memori yang kerap dan kitar semula.
  3. Kurangkan kekerapan peruntukan ingatan: Kurangkan kekerapan peruntukan memori sebanyak mungkin, terutamanya apabila sejumlah besar objek kecil atau sederhana diperuntukkan dan dilepaskan dalam tempoh yang singkat Objek ini boleh diletakkan dalam kolam cache untuk mengelakkan kerap Cipta dan musnahkan objek ini.
  4. Kurangkan penggunaan memori: Kurangkan saiz setiap objek sebanyak mungkin, yang boleh mengurangkan jumlah memori yang perlu diperuntukkan semasa program berjalan, dengan itu mengurangkan kekerapan GC. Ini boleh dicapai dengan menggunakan struktur dan bukannya tatasusunan.

Ringkasnya, mekanisme GC Golang membawa banyak kemudahan, tetapi ia juga akan memberi sedikit kesan kepada prestasi program. Untuk meningkatkan prestasi program, kita perlu mengambil langkah pengoptimuman yang sepadan berdasarkan situasi sebenar. Hanya dengan memahami secara mendalam dan mahir menggunakan mekanisme peruntukan memori Golang kita boleh mengoptimumkan prestasi program Golang dengan lebih baik.

Atas ialah kandungan terperinci golang mallocgc terlalu banyak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!