Golang ialah bahasa pengaturcaraan yang cekap dan mudah digunakan, dan mekanisme penjadualannya merupakan salah satu faktor penting untuk prestasi cemerlangnya. Di Golang, penjadual mengawal semua Goroutine adalah rangkaian ringan bahasa Go Setiap Goroutine boleh berjalan secara bebas untuk mencapai keselarasan tinggi. Untuk memberikan permainan penuh kepada prestasi Golang, kami perlu mengoptimumkan tetapan penjadualan Artikel ini akan memperkenalkan cara untuk menyediakan mekanisme penjadualan Golang.
Penjadual Golang adalah berdasarkan model M:N Biasanya, satu urutan sistem pengendalian (M) sepadan dengan berbilang Goroutine (N). Penjadual akan memperuntukkan Goroutines kepada urutan yang tersedia untuk mencapai pelaksanaan serentak. Penjadual akan menjadualkan tugas mengikut status setiap Goroutine untuk memastikan penggunaan sumber komputer secara optimum.
Parameter yang anda perlu ketahui semasa menyediakan penjadual Golang
Sebelum menyediakan penjadual Golang, anda perlu mengetahui parameter berikut:
GOMAXPROCS ialah parameter yang digunakan untuk menetapkan bilangan maksimum CPU yang boleh digunakan oleh program Golang. Secara lalai, nilai GOMAXPROCS ialah bilangan teras CPU mesin. Menetapkan parameter ini terlalu besar atau terlalu kecil akan menjejaskan prestasi Golang.
Jika GOMAXPROCS ditetapkan terlalu besar, bilangan utas akan meningkat, menyebabkan CPU kerap bertukar antara utas yang berbeza, meningkatkan beban sistem dan juga menjejaskan kecekapan pelaksanaan aplikasi.
Jika GOMAXPROCS ditetapkan terlalu kecil, di satu pihak, program tidak akan dapat menggunakan sepenuhnya prestasi CPU berbilang teras sebaliknya, kerana penjadual Golang adalah berdasarkan penjadualan awalan; jika GOMAXPROCS ditetapkan terlalu kecil, Ini akan menyebabkan Goroutine tidak dapat dijadualkan dalam masa, mengakibatkan Goroutine menyekat dan kecekapan pelaksanaan program yang rendah.
GOGC ialah parameter yang digunakan untuk mengawal masa pencetus dan kekerapan kutipan sampah Golang. Pengumpul sampah Golang dilaksanakan berdasarkan algoritma tanda-dan-sapu, yang bermaksud bahawa program perlu berhenti seketika untuk tempoh masa semasa operasi untuk kutipan sampah. Nilai lalai GOGC ialah 100, iaitu, apabila penggunaan memori timbunan dalam sistem mencapai 100% daripada jumlah memori, kutipan sampah akan dicetuskan.
Jika GOGC ditetapkan terlalu rendah, sistem akan kerap melakukan kutipan sampah, mengakibatkan penurunan kecekapan pelaksanaan program. Jika GOGC ditetapkan terlalu tinggi, ia akan menyebabkan pengumpul sampah mencetuskan masa yang lebih lama, yang akan menjejaskan kecekapan penggunaan memori program.
GoSchedTimeout ialah parameter yang digunakan untuk menetapkan selang penjadualan Goroutine. Secara lalai, penjadualan Goroutine adalah berdasarkan persaingan untuk sumber komputer, bukannya menjadualkan tugas mengikut garis masa yang telah ditetapkan.
Jika GoSchedTimeout ditetapkan kepada nilai yang sangat kecil, ia akan menyebabkan Goroutine dijadualkan dengan kerap, sekali gus mengurangkan kecekapan pelaksanaan program. Sebaliknya, jika GoSchedTimeout ditetapkan kepada nilai yang terlalu besar, Goroutine tidak akan dijadualkan dalam masa, sekali gus menjejaskan kecekapan pelaksanaan program.
MaxBackgroundGC ialah parameter yang digunakan untuk menetapkan bilangan maksimum kutipan sampah serentak di Golang. Mekanisme kutipan sampah Golang dilakukan di latar belakang secara lalai. MaxBackgroundGC digunakan untuk menetapkan perkadaran kutipan sampah serentak Nilai lalai nilai ini ialah 1, iaitu, jika pada masa ini terdapat 5 teras CPU, maka maksimum satu tugas kutipan sampah boleh dilakukan secara selari di latar belakang. masa yang sama.
Jika MaxBackgroundGC ditetapkan terlalu besar, ia akan menyebabkan penggunaan sumber sistem yang berlebihan dan menjejaskan kecekapan pelaksanaan program. Jika MaxBackgroundGC ditetapkan terlalu kecil, ia akan menjejaskan kecekapan kutipan sampah.
Tetapkan pengoptimuman mekanisme penjadualan Golang
Mengikut parameter di atas, mekanisme penjadualan Golang boleh dioptimumkan:
import "runtime" func main() { runtime.GOMAXPROCS(8) //... }
import ( "runtime" "time" ) func main() { runtime.GC() //设置触发时机 runtime.SetGCPercent(10) //设置触发时机和时间 debug.SetGCPercent(20) debug.SetGCPercent(-1) //... }
runtime.Gosched()
func gc() { for { select { case <-time.After(time.Minute): runtime.GC() } } }
Atas ialah kandungan terperinci tetapan penjadualan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!