Memahami Pelaksanaan Goroutine: Mengapa Goroutine Saya Kekal Terbiar
Dalam kod Go anda, anda cuba mencuba goroutine dan saluran. Matlamatnya adalah untuk mencipta goroutine yang membaca secara berterusan daripada saluran, tetapi mesej "Memasuki goroutine..." yang dijangka tidak pernah muncul. Artikel ini meneroka sebab di sebalik tingkah laku ini.
Kod yang anda berikan termasuk goroutine yang dibuat seperti berikut:
go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages)
Walaupun goroutine dilancarkan, ia ditamatkan dengan cepat kerana program utama tamat serta-merta selepas mencetak "Selesai!". Goroutines melaksanakan serentak dengan program utama; walau bagaimanapun, ia akan ditamatkan apabila program utama keluar.
Untuk mengelakkan goroutine daripada ditamatkan sebelum waktunya, anda perlu mencari cara untuk memastikan program utama berjalan semasa goroutine sedang dilaksanakan. Ini boleh dicapai dengan menggunakan saluran berasingan yang menunggu bilangan mesej tertentu, menggunakan penyegerakan.WaitGroup atau melaksanakan teknik lain.
Blog Go menawarkan panduan yang luas untuk berkonkurensi (https://blog .golang.org/go-proverbs) yang memberikan cerapan berharga tentang cara konkurensi berfungsi dalam Go.
Atas ialah kandungan terperinci Mengapa Goroutine Saya Kekal Terbiar Apabila Program Utama Keluar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!