Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilakah penjadual Go mencipta M dan P baharu?

Bilakah penjadual Go mencipta M dan P baharu?

王林
王林ke hadapan
2024-02-06 09:00:09845semak imbas

Bilakah penjadual Go mencipta M dan P baharu?

Kandungan soalan

Baru belajar model GMP golang dan sekarang saya faham bagaimana goroutine, utas sistem pengendalian dan konteks/pemproses golang bekerjasama antara satu sama lain. Tetapi saya masih tidak faham bila M dan P akan dijana?

Sebagai contoh, saya mempunyai kod ujian untuk menjalankan beberapa operasi pada pangkalan data, dan terdapat dua kes ujian (dua kelompok goroutine):

func Test_GMP(t *testing.T) {
    for _ = range []struct {
        name string
    }{
        {"first batch"},
        {"second batch"},
    } {
        goroutineSize := 50
        done := make(chan error, goroutineSize)
        for i := 0; i < goroutineSize; i++ {
            go func() {
                // do some databases operations...
                // each goroutine should be blocked here for some time...

                // propogate the result
                done <- nil
            }()
        }

        for i := 0; i < goroutineSize; i++ {
            select {
            case err := <-done:
                assert.NoError(t, err)
            case <-time.After(10 * time.Second):
                t.Fatal("timeout waiting for txFunc goroutine")
            }
        }
        close(done)
    }
}

Dari pemahaman saya, jika M dicipta apabila diperlukan. Dalam kumpulan pertama goroutine, 8 (bilangan teras maya pada mesin saya) utas sistem pengendalian akan dibuat, kumpulan kedua hanya akan menggunakan semula 8 utas sistem pengendalian ini tanpa membuat utas baharu. Adakah ini betul?

Kami akan berterima kasih jika anda dapat menyediakan lebih banyak bahan atau blog mengenai topik ini.


Jawapan Betul


M boleh digunakan semula hanya jika proses anda tidak disekat atau tidak mempunyai sebarang panggilan sistem. Dalam kes anda, anda mempunyai tugas menyekat dalam go func(). Oleh itu, bilangan M tidak terhad kepada 8 (bilangan teras maya pada mesin saya). Kumpulan pertama akan menyekat dan mengalih keluar dari P dan menunggu proses penyekatan selesai sementara M baharu dicipta dikaitkan dengan P.

Lihat di bawah untuk butiran lanjut,

Atas ialah kandungan terperinci Bilakah penjadual Go mencipta M dan P baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam