Rumah > pembangunan bahagian belakang > Golang > Mengapa Saluran My Go Unbuffered Mencetak Mesej dalam Pesanan Tidak Dijangka?

Mengapa Saluran My Go Unbuffered Mencetak Mesej dalam Pesanan Tidak Dijangka?

Mary-Kate Olsen
Lepaskan: 2024-12-09 03:38:11
asal
692 orang telah melayarinya

Why Does My Go Unbuffered Channel Print Messages in an Unexpected Order?

Memahami Susunan Output Saluran dalam Go

Coretan kod Go yang diberikan melibatkan penggunaan saluran tidak buffer untuk berkomunikasi antara gorouti. Walaupun kod dijangka mencetak "hello" dan kemudian "ping" disebabkan oleh tingkah laku menyekat, ia secara konsisten mencetak "ping" diikuti dengan "hello." Ini menimbulkan persoalan tentang susunan mesej ditulis dan dibaca daripada saluran.

Seperti yang dicadangkan oleh kod, saluran tidak buffer menyekat kedua-dua penghantar dan penerima sehingga data tersedia. Ini bermakna bahawa apabila rutin go cuba menulis ke saluran, mereka akan menyekat sehingga mesej dibaca.

Setelah pelaksanaan, kod itu memotong rutin dua go yang cuba menulis "hello" dan "ping" ke saluran itu. Memandangkan tiada penerima tersedia serta-merta, kedua-dua rutin menyekat.

Apabila operasi baca pertama (msg := <-messages) berlaku, atur cara tidak akan sewenang-wenangnya memilih goroutine menunggu. Sebaliknya, ia akan memilih yang telah menulis ke saluran. Ini menerangkan sebab "ping" sentiasa diberikan kepada msg, kerana ia sentiasa ditulis sebelum "hello."

Oleh itu, susunan mesej yang dicetak ditentukan oleh susunan pelaksanaan goroutine, yang bukan penentu. Dengan menambahkan pernyataan cetakan pada goroutine yang menulis pada saluran, seseorang boleh mengesahkan bahawa susunan penulisan sepadan dengan susunan mesej yang dibaca daripada saluran.

Atas ialah kandungan terperinci Mengapa Saluran My Go Unbuffered Mencetak Mesej dalam Pesanan Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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