Rumah > Artikel > pembangunan bahagian belakang > Adakah `time.Sleep` Benar-benar Menyekat Goroutine?
Adakah masa.Sleep Block Goroutines?
Dalam Go, salah tanggapan biasa ialah masa itu.Sleep menghalang goroutine, yang membawa kepada kebimbangan tentang berlebihan penciptaan benang.
Memahami Go Penjadual
Go menggunakan Penjadual Berbilang Pengeluar, Pengguna Tunggal (MPG), di mana bilangan rangkaian terhad yang dipanggil M berkongsi kerja daripada baris gilir yang diservis oleh Ps (goroutin pekerja). Apabila M melahu, ia mengambil kerja dari baris gilir dan melaksanakannya.
Adakah masa.Sleep Really Block Goroutines?
Ya, time.Sleep block goroutines dalam erti kata bahawa ia menghalang pelaksanaan selanjutnya goroutine semasa semasa tidur tempoh.
Mengapa Penciptaan Benang Terhad Apabila Menggunakan masa.Tidur?
Walaupun sifat masa yang menyekat.Tidur, penjadual Go mungkin tidak menghasilkan urutan baharu disebabkan dua sebab:
Perbezaan dalam Penciptaan Benang Antara Contoh
Contoh pertama anda, di mana goroutine tidur untuk masa yang lama, menggunakan bilangan benang tetap kerana penjadual boleh menentukan bahawa tiada pemprosesan tambahan diperlukan semasa tempoh tidur. Sebaliknya, contoh kedua anda, yang melibatkan operasi IO serentak, memerlukan lebih banyak urutan kerana setiap goroutine secara aktif melaksanakan tugas IO.
Bila Perlu Bimbang Tentang Penciptaan Benang
Secara amnya, Penjadual Go mengendalikan penciptaan benang dengan cekap. Walau bagaimanapun, dalam kes yang jarang berlaku, seperti apabila anda sengaja mencipta bilangan goroutin yang berlebihan yang menghabiskan sebahagian besar masanya untuk menyekat operasi I/O, anda mungkin menghadapi masalah dengan penciptaan benang yang berlebihan.
Atas ialah kandungan terperinci Adakah `time.Sleep` Benar-benar Menyekat Goroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!