Rumah > pembangunan bahagian belakang > Golang > Mengapa Goroutine Menyekat Satu Sama Lain, dan Bagaimana Ini Boleh Diatasi?

Mengapa Goroutine Menyekat Satu Sama Lain, dan Bagaimana Ini Boleh Diatasi?

Susan Sarandon
Lepaskan: 2024-12-13 15:09:14
asal
1012 orang telah melayarinya

Why Do Goroutines Block Each Other, and How Can This Be Addressed?

Goroutine Menyekat Goroutine Lain

Dalam coretan kod yang diberikan, goroutine pertama memasuki gelung tak terhingga, menyekat baki goroutine daripada dihantar ke saluran tamat masa. Tingkah laku ini ialah ciri penjadualan koperasi dalam goroutine.

Gorutin menghasilkan penjadual dalam senario berikut:

  • Menghantar atau menerima ke/dari saluran yang tidak ditimbal
  • Panggilan sistem (cth., pembacaan fail atau rangkaian menulis)
  • Peruntukan memori
  • Masa panggilan.Sleep()
  • Waktu jalan panggilan.Gosched()

Dalam kes ini, gelung tak terhingga dalam goroutine pertama menghalangnya daripada menyerah kepada penjadual. Oleh itu, goroutine yang lain tidak boleh menghantar ke saluran tamat masa dan program terus berjalan selama-lamanya dan bukannya ditamatkan selepas satu saat.

Satu penyelesaian yang berpotensi untuk isu ini ialah menggunakan penjadual preemptive dan bukannya penjadual koperasi. Dalam penjadual preemptive, sistem bertukar secara paksa antara goroutine berdasarkan keutamaannya. Walau bagaimanapun, Go pada masa ini menggunakan penjadual koperasi.

Strategi lain ialah dengan menyerahkan secara manual kepada penjadual menggunakan masa jalan.Gosched(). Walau bagaimanapun, teknik ini secara amnya tidak diperlukan dalam kebanyakan program kerana komunikasi yang mencukupi melalui saluran atau sistem I/O.

Adalah penting untuk ambil perhatian bahawa menetapkan GOMAXPROCS kepada nilai yang lebih tinggi mungkin tidak menyelesaikan isu sepenuhnya. Walaupun ia membenarkan berbilang goroutin berjalan selari, pemungut sampah masih beroperasi secara serentak. Jika goroutin CPU yang tinggi tidak pernah menghasilkan, GC boleh menyekat goroutin lain selama-lamanya semasa berjalan.

Atas ialah kandungan terperinci Mengapa Goroutine Menyekat Satu Sama Lain, dan Bagaimana Ini Boleh Diatasi?. 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