Adakah time.Sleep() Benar-benar Menyekat Goroutine dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-18 03:10:02
asal
839 orang telah melayarinya

Does time.Sleep() Really Block Goroutines in Go?

Adakah masa.Sleep Menangguhkan Goroutine?

Time.Sleep sering digunakan dalam program Go untuk menjeda pelaksanaan untuk tempoh tertentu. Walau bagaimanapun, tidak seperti beberapa bahasa pengaturcaraan lain, time.Sleep tidak benar-benar menyekat goroutine.

Model MPG dan Penjadualan Goroutine

Penjadual masa jalan Go mengikuti model yang dikenali sebagai MPG ( M: M, P: P, G: Goroutines). Setiap M (mesin) menjalankan P (pemproses) goroutine secara serentak. Jika goroutine memasuki keadaan menyekat, Pnya berpisah daripada M dan menemui M terbiar atau mencipta yang baharu jika tiada yang tersedia.

Adakah masa.Sleep Block Goroutines?

Ya, masa.Tidur memang menunjukkan bahawa goroutine berada dalam keadaan tersekat. Ini bermakna pernyataan seterusnya tidak boleh dilaksanakan serta-merta, kerana goroutine tidak tersedia buat seketika.

Mengapa Tidak Masa.Sleep Mencipta Lebih Banyak Benang?

Walaupun sifatnya menyekat masa. Tidur, penjadual masa jalan tidak boleh membuat urutan tambahan. Ini kerana penjadual bertujuan untuk mengoptimumkan prestasi dan penggunaan sumber. Oleh itu, jika terdapat cukup benang yang tersedia untuk mengendalikan gorouti tidak tidur, ia tidak memperuntukkan benang baharu untuk masa. Walau bagaimanapun, dalam keadaan luar biasa, apabila terdapat banyak masa. Gorut tidur, penjadual boleh cipta rangkaian tambahan untuk mengekalkan tindak balas.

Perbezaan antara masa.Sleep dan IO Sebenar

Dalam contoh yang diberikan, penggunaan IO sebenar menghasilkan bilangan utas yang lebih besar berbanding menggunakan masa.Tidur. Ini kerana operasi IO melibatkan interaksi dengan sistem pengendalian dan peranti luaran, yang boleh memperkenalkan titik sekatan tambahan dan memerlukan urutan khusus.

Kesimpulan

Sementara masa.Tidur menandakan goroutine yang menyekat, ia tidak semestinya membawa kepada penciptaan benang baru. Penjadual masa jalan mengoptimumkan peruntukan benang berdasarkan sumber yang tersedia dan bilangan goroutin aktif. Pembangun tidak seharusnya terlalu mengambil berat tentang penciptaan benang melainkan program mereka direka bentuk secara sengaja untuk mensimulasikan kes patologi penggunaan benang yang berlebihan.

Atas ialah kandungan terperinci Adakah time.Sleep() Benar-benar Menyekat Goroutine dalam Go?. 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