Goroutine
Go 是一个天生支持并发语言
go func(){}
这样就开启了一个协程
何为协程?
协程可以理解为轻量的线程。
潜在危害
虽然我们可以用go很轻松实现并发,但是万事皆有度
,并发也是如此。虽然每个Goroutine的内存占用大概为2KB,但是并不意味着我们可以无限并发。
所以在必要时我们需要进行并发控制,从而合理利用资源。
示例代码
package main
import (
"fmt"
"time"
)
/**
@author luckyFang
@date 2020 10 26
@desc golang 并发处理
*/
func main() {
channel()
}
func channel() {
count := 50
sum := 1000
// 任务并发 chan
ch := make(chan int , count)
defer close(ch)
for i := 0; i < sum; i++ {
ch <- 0
go func(i int) {
time.Sleep(time.Duration(1)*time.Second)
fmt.Println(i)
<-ch
}(i)
}
}