您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。