Rumah >pembangunan bahagian belakang >Golang >Mengapa Saluran My Go Unbuffered Mencetak Mesej dalam Pesanan Tidak Dijangka?
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!