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

sumber:php.cn
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