Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menyegerakkan Goroutines melalui Saluran di Golang
Cara menyegerakkan Goroutines melalui Saluran di Golang
Goroutine ialah benang ringan di Golang yang boleh melaksanakan berbilang tugas secara selari dalam satu program. Dalam Goroutine, kita boleh menggunakan Saluran untuk komunikasi dan penyegerakan data. Saluran menyediakan mekanisme komunikasi antara Goroutines untuk memastikan ketepatan dan penyegerakan data.
Di Golang, Saluran ialah elemen selamat jenis yang digunakan untuk menghantar data antara Goroutines. Dengan menggunakan Saluran, kami boleh mencapai penyegerakan antara Goroutines untuk memastikan data dihantar dan diproses pada masa dan susunan yang betul.
Seterusnya, mari lihat contoh kod untuk menunjukkan cara Goroutine menyegerak melalui Saluran:
package main import ( "fmt" "time" ) func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("Worker", id, "started job", j) time.Sleep(time.Second) fmt.Println("Worker", id, "finished job", j) results <- j * 2 } } func main() { jobs := make(chan int, 100) results := make(chan int, 100) // 启动三个 Goroutine 执行任务 for w := 1; w <= 3; w++ { go worker(w, jobs, results) } // 发送任务到 Jobs Channel for j := 1; j <= 5; j++ { jobs <- j } close(jobs) // 从 Results Channel 中接收结果 for a := 1; a <= 5; a++ { <-results } time.Sleep(time.Second) }
Dalam contoh di atas, kami mencipta dua Saluran: jobs
dan results. <code>jobs
digunakan untuk menghantar tugas kepada Goroutine dan results
digunakan untuk menerima hasil pelaksanaan tugas. jobs
和 results
。jobs
用于发送任务到 Goroutine 中,而 results
用于接收任务执行的结果。
首先,我们通过使用 go
关键字来启动三个 Goroutine 并分别传递了它们所需的 jobs
和 results
Channels。然后,我们循环发送了 5 个任务到 jobs
Channel 中,并在完成后关闭了 jobs
Channel。
在 worker
函数中,我们使用 range
关键字来不断地从 jobs
Channel 中接收任务,并在处理完任务后将结果发送到 results
Channel 中。由于 Channel 是阻塞的,当我们从 jobs
Channel 接收到任务时,该 Goroutine 将停止并等待下一个任务的到来。
在主函数中,我们使用了 range
关键字来不断地从 results
Channel 中接收结果,在任务执行完毕后,我们通过 <-results
表达式来表示我们要接收结果数据,但实际上我们不会使用这些值。
最后,在主函数中,我们使用了一个延迟函数 time.Sleep(time.Second)
go
dan masing-masing lulus jobs
dan results
Channels. Kemudian, kami menghantar 5 tugasan ke Saluran jobs
dalam satu gelung dan menutup Saluran jobs
apabila selesai. Dalam fungsi worker
, kami menggunakan kata kunci range
untuk terus menerima tugasan daripada Saluran jobs
dan selepas memproses tugasan, Hasilnya dihantar ke Saluran hasil
. Memandangkan Saluran menyekat, apabila kami menerima tugas daripada Saluran jobs
, Goroutine akan berhenti dan menunggu tugasan seterusnya tiba. Dalam fungsi utama, kami menggunakan kata kunci range
untuk terus menerima hasil daripada Saluran results
Selepas tugasan selesai, kami lulus <
ungkapan untuk menunjukkan bahawa kami ingin menerima data hasil, tetapi kami sebenarnya tidak akan menggunakan nilai ini. 🎜🎜Akhir sekali, dalam fungsi utama, kami menggunakan fungsi tunda time.Sleep(time.Second)
untuk memastikan program tidak ditamatkan serta-merta selepas Goroutine dilaksanakan. 🎜🎜Melalui kod contoh di atas, kita dapat melihat bahawa dengan menggunakan Saluran, kita boleh mencapai penyegerakan antara Goroutines untuk memastikan ketepatan dan susunan data. Dalam aplikasi sebenar, kami boleh mencipta pelbagai jenis Saluran mengikut keperluan untuk memenuhi pelbagai keperluan. 🎜🎜Ringkasnya, penyegerakan antara Goroutines di Golang melalui Saluran ialah mekanisme yang mudah dan berkuasa. Ia bukan sahaja menyediakan komunikasi antara benang, tetapi juga memastikan ketepatan dan penyegerakan data, memberikan kemudahan dan fleksibiliti untuk pengaturcaraan serentak. 🎜Atas ialah kandungan terperinci Bagaimana untuk menyegerakkan Goroutines melalui Saluran di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!