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

Bilakah penjadual Go mencipta M dan P baharu?

王林
Lepaskan: 2024-02-06 09:00:09
ke hadapan
933 orang telah melayarinya

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)
    }
}
Salin selepas log masuk

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 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