在Go中實現高并發主要依賴于以下幾個方面:
go
關鍵字。Goroutines相比于操作系統線程,創建和銷毀的開銷更小,因此可以輕松地實現高并發。package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 10; i++ {
fmt.Printf("%d ", i)
time.Sleep(1 * time.Second)
}
}
func main() {
go printNumbers()
time.Sleep(10 * time.Second)
}
package main
import (
"fmt"
"time"
)
func sendNumbers(ch chan int) {
for i := 1; i <= 10; i++ {
ch <- i
time.Sleep(1 * time.Second)
}
close(ch)
}
func main() {
ch := make(chan int)
go sendNumbers(ch)
for num := range ch {
fmt.Printf("%d ", num)
}
}
package main
import (
"fmt"
"time"
)
func sendNumbers(ch chan int) {
for i := 1; i <= 10; i++ {
ch <- i
time.Sleep(1 * time.Second)
}
close(ch)
}
func receiveNumbers(ch chan int, done chan bool) {
for num := range ch {
fmt.Printf("%d ", num)
}
done <- true
}
func main() {
ch := make(chan int)
done := make(chan bool)
go sendNumbers(ch)
go receiveNumbers(ch, done)
<-done
}
package main
import (
"fmt"
"sync"
)
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Printf("Worker %d started job %d\n", id, j)
time.Sleep(time.Second)
fmt.Printf("Worker %d finished job %d\n", id, j)
results <- j * 2
}
}
func main() {
const numJobs = 5
const numWorkers = 3
jobs := make(chan int, numJobs)
results := make(chan int, numJobs)
var wg sync.WaitGroup
for w := 1; w <= numWorkers; w++ {
wg.Add(1)
go worker(w, jobs, results)
}
for j := 1; j <= numJobs; j++ {
jobs <- j
}
close(jobs)
go func() {
wg.Wait()
close(results)
}()
for r := range results {
fmt.Println("Result:", r)
}
}
通過以上方法,可以在Go中實現高并發。在實際應用中,可以根據具體需求選擇合適的方法來提高系統的并發性能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。