Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Penjadual Go Mencipta M dan P Baharu Apabila Goroutines Melakukan Operasi Penyekatan?

Bagaimanakah Penjadual Go Mencipta M dan P Baharu Apabila Goroutines Melakukan Operasi Penyekatan?

Patricia Arquette
Lepaskan: 2024-10-30 02:18:28
asal
589 orang telah melayarinya

How Does the Go Scheduler Create New M and P When Goroutines Perform Blocking Operations?

Apabila Go Scheduler Mencipta M dan P Baharu dalam Model GMP

Dalam model GMP (Goroutine, Machine, Processor) Go, penjadual menguruskan penciptaan M (Mesin) dan P (Pemproses) berdasarkan keadaan tertentu.

M Creation

M dicipta sebagai tindak balas kepada peristiwa tertentu, seperti:

  • Operasi Menyekat: Apabila goroutine melakukan operasi menyekat (cth., I/O, syscall), M yang dikaitkan dengan goroutine itu disekat. Untuk terus melaksanakan goroutine, penjadual mencipta M.
  • Jadual Paip Penjadualan: Apabila baris gilir G global, yang menyimpan gorout menunggu pelaksanaan, mempunyai lebih banyak goroutin daripada bilangan M yang tersedia , penjadual mencipta M baharu untuk melaksanakan goroutine.

P Creation

P dicipta pada permulaan program berdasarkan pembolehubah persekitaran GOMAXPROCS, yang menentukan bilangan maksimum P tersedia. Nilai lalai ialah bilangan CPU logik pada sistem.

Analisis Contoh

Dalam kod contoh anda, anda mempunyai dua kelompok goroutine menjalankan operasi pangkalan data. Setiap goroutine melakukan operasi menyekat I/O.

  • Batch Pertama: Penjadual akan mencipta 8 M (memandangkan anda mempunyai 8 teras maya) dan 1 P untuk menjalankan kumpulan pertama daripada goroutine. Setiap M akan melaksanakan goroutine daripada baris gilir tempatan P.
  • Batch Kedua: Memandangkan operasi menyekat menyebabkan M awal disekat, penjadual akan mencipta M baharu untuk goroutin yang tinggal dalam kumpulan kedua. M akan dikaitkan dengan P baharu, walaupun bilangan P kekal pada 1.

Oleh itu, dalam kes anda, penjadual akan mencipta lebih daripada 8 M untuk kumpulan kedua goroutin kerana operasi menyekat. P akan dihadkan kepada 1 berdasarkan nilai GOMAXPROCS, tetapi M akan dibuat secara dinamik mengikut keperluan.

Sumber Tambahan

Untuk pemahaman lanjut, rujuk perkara berikut sumber:

  • https://www.programmersought.com/article/79557885527/
  • https://blog.golang.org/go-goroutine-os-thread-and -pengurusan-cpu

Atas ialah kandungan terperinci Bagaimanakah Penjadual Go Mencipta M dan P Baharu Apabila Goroutines Melakukan Operasi Penyekatan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan