Rutin Go membolehkan fungsi Go dilaksanakan serentak tanpa menyekat dan berkongsi ruang memori yang sama. Ini menjejaskan kelakuan fungsi supaya ia boleh: laksana serentak, menjalankan tugas individu secara serentak. Tidak menyekat, tidak menunggu untuk fungsi lain selesai. Memori yang dikongsi, pembolehubah global boleh diakses dan diubah suai. . Ini membolehkan program menggunakan berbilang teras komputer dengan lebih cekap.
Cara membuat Go Routine
Untuk mencipta rutin Go, anda boleh menggunakan kata kunci go
. Contohnya, kod berikut mencipta rutin Go baharu yang akan mencetak mesej ke
package main import "fmt" func main() { // 创建一个 channel ch := make(chan string) // 创建一个 Go routine 并将其作为一个新线程执行 go func() { ch <- "Hello World!" }() // 从 channel 读取消息 msg := <-ch fmt.Println(msg) }
Kesan Go Routine pada gelagat fungsi
Rutin Go mempunyai kesan berikut pada gelagat fungsi: < ul>
Rutin Go membolehkan fungsi dilaksanakan secara serentak, bermakna ia boleh dijalankan pada masa yang sama.
go
关键字。例如,以下代码创建一个新的 Go routine,它将对 channel
打印消息:package main import ( "fmt" "sync/atomic" "runtime" ) var counter uint64 func main() { // 创建 100 个 Go routine for i := 0; i < 100; i++ { go func() { atomic.AddUint64(&counter, 1) }() } // 等待所有 Go routine 完成 runtime.Gosched() fmt.Println("Counter:", counter) }
Go Routine 对函数行为的影响
Go routine 会对函数的行为产生以下影响:
实战案例
以下是一个展示 Go routine 如何影响函数行为的实战案例:
rrreee在这个例子中,我们创建了 100 个 Go routine,每个 Go routine 都对一个全局变量 counter
进行递增。由于 Go routine 是并发执行的,因此它们可以同时对 counter
进行递增,这可能会导致数据竞争问题。
为了解决这个问题,我们使用了 sync/atomic
包中的 AddUint64
函数,它是一个原子操作,保证在并发情况下安全地更新 counter
Tidak menyekat:
counter
pada masa yang sama, yang boleh menyebabkan isu perlumbaan data. 🎜🎜Untuk menyelesaikan masalah ini, kami menggunakan fungsi AddUint64
dalam pakej sync/atomic
, iaitu operasi atom yang menjamin kemas kini selamat dalam situasi serentak. nilai kaunter
. 🎜Atas ialah kandungan terperinci Bagaimanakah goroutin mempengaruhi tingkah laku fungsi golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!