Goroutine akan tidur lebih awal
editor php Banana ada di sini untuk memperkenalkan kepada anda masalah biasa, iaitu, Goroutine tidur lebih awal. Menggunakan Goroutine untuk melaksanakan tugas secara serentak dalam bahasa Go adalah sangat cekap, tetapi kadangkala kita menghadapi situasi di mana Goroutine memasuki keadaan tidur sebelum melaksanakan tugas, menyebabkan tugasan gagal diteruskan seperti biasa. Artikel ini akan menerangkan punca masalah ini secara terperinci dan menyediakan penyelesaian untuk membantu semua orang memahami dan menggunakan Goroutine dengan lebih baik.
Kandungan soalan
Kod:
package main import ( "fmt" "time" ) func main() { link := make(chan bool) stop := make(chan bool) go a(link, stop) go b(link) <-stop } func a(link chan bool, stop chan bool) { for i := 0; i < 20; i++ { time.Sleep(1 * time.Second) link <- true } stop <- true } func b(link chan bool) { go func() { <-link fmt.Println("A") }() go func() { <-link fmt.Println("B") }() }
Kod ini tidak melakukan sesuatu yang istimewa, saya hanya mahu memahami saluran dan goroutine. Tetapi ada masalah dan coroutine tertidur selepas menggelung dua kali dan apl itu ranap.
Mari kita analisa apa yang dilakukannya - setiap saat mesej dihantar ke link
。函数 b
在两个地方接收它,因此调用了 print
a dan b. Jadi pada asasnya setiap detik a dan b harus muncul dalam konsol. Tetapi atas sebab yang tidak saya ketahui, ia tidak berlaku, program mencetak a dan b sekali dan kemudian ranap.
Saya mungkin tidak memahami konsep itu dengan baik (golang benar-benar tidak intuitif), jadi saya harap saya boleh mendapatkan jawapannya di sini.
Penyelesaian
Menghantar ke saluran tanpa buffer hanya akan berjaya jika terdapat goroutine yang menerima data daripadanya. Untuk dua hantaran pertama, terdapat blok goroutine dari link
通道接收。但是它们收到一个值并终止,并且不再有任何 goroutine 从 link
接收,因此第三个发送到 link
. Memandangkan tiada goroutine lain berjalan, program menemui jalan buntu.
Atas ialah kandungan terperinci Goroutine akan tidur lebih awal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Analisis status penonton rangka kerja GO dalam ekosistem pengaturcaraan GO semasa, pemaju sering menghadapi memilih rangka kerja yang tepat untuk memenuhi keperluan perniagaan mereka. Hari ini kita ...

Pesanan pelaksanaan fungsi init () dalam bahasa Go dalam pengaturcaraan GO, fungsi init () adalah fungsi khas, yang digunakan untuk melaksanakan beberapa fungsi yang diperlukan apabila inisialisasi pakej ...

Menggunakan Golang untuk melaksanakan Linux ...

Meneroka Masalah Sempadan Sempadan GO Slicing Index: Slice Single-Element memintas dalam GO, kepingan adalah struktur data yang fleksibel yang boleh digunakan untuk tatasusunan atau lain-lain ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...
