Rumah  >  Artikel  >  pembangunan bahagian belakang  >  tetapan penjadualan golang

tetapan penjadualan golang

WBOY
WBOYasal
2023-05-19 09:18:30422semak imbas

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:

  1. GOMAXPROCS

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.

  1. GOGC

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.

  1. GoSchedTimeout

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.

  1. MaxBackgroundGC

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:

  1. Tetapkan GOMAXPROCS
>
import "runtime"
func main() {
    runtime.GOMAXPROCS(8)
    //...
}
    Tetapkan GOGC
Apabila program dimulakan, kekerapan dan titik masa pengumpulan sampah boleh dikawal dengan menetapkan nilai GOGC :

import (
    "runtime"
    "time"
)
func main() {
    runtime.GC()
    //设置触发时机
    runtime.SetGCPercent(10)
    //设置触发时机和时间
    debug.SetGCPercent(20)
    debug.SetGCPercent(-1)
    //...
}

    Tetapkan GoSchedTimeout
Penjadual Golang adalah tak segerak secara lalai dan menentukan masa Goroutine dijadualkan berdasarkan persaingan CPU. Oleh itu, nilai lalai GoSchedTimeout ditetapkan agak besar Jika anda perlu melaraskannya, anda boleh menetapkannya dalam program:

runtime.Gosched()

    Jalankan GC dengan kerap
Sejak. Mekanisme kutipan sampah Golang adalah Ia dilaksanakan berdasarkan algoritma tanda-dan-sapu Ia perlu menjeda perjalanan program semasa kutipan sampah, yang menjejaskan kecekapan pelaksanaan program. Oleh itu, anda boleh mengelakkan kesan daripada melakukan kutipan sampah untuk masa yang lama pada satu-satu masa dengan menjalankan GC dengan kerap. Dalam program ini, anda boleh menetapkannya seperti ini:

func gc() {
        for {
              select {
              case <-time.After(time.Minute):
                   runtime.GC()
              }
        }
}

Ringkasan

Golang ialah bahasa pengaturcaraan berprestasi tinggi, dan mekanisme konkurensinya merupakan salah satu faktor penting untuk prestasi cemerlangnya. Artikel ini memperincikan cara menyediakan mekanisme penjadualan Golang, termasuk menetapkan parameter seperti GOMAXPROCS, GOGC, GoSchedTimeout dan MaxBackgroundGC. Dengan menetapkan parameter ini secara munasabah, prestasi Golang boleh digunakan sepenuhnya dan kecekapan pelaksanaan program boleh dipertingkatkan.

Atas ialah kandungan terperinci tetapan penjadualan 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
Artikel sebelumnya:putaran gambar golangArtikel seterusnya:putaran gambar golang