day2_1
1.go关键字,表示开启一个goroutine,这里的hello函数就会在一个新的goroutine中执行,(i)是传递给hello函数的参数
2.协程:用户态,轻量级线程,栈KB级别
3.如果有多核CPU的话,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内的多个协程却绝对串行的,无论有多少个CPU(核)。
4.线程:内核太,线程跑多个协程,栈MB级别
5.提倡通过通信共享内存,而不是通过共享内存而实现通信
6.在没有准备就绪的接收者的时候,第一个 goroutine 在发送消息后channel将被阻塞。如果通道是无缓冲的,发送者将被阻塞,直到接收者接收到值。
7.依赖管理三要素:
配置文件,依赖描述 go.mod
中心仓库管理依赖库 proxy
本地工具 go get/mod
func HelloGoRoutine() {
for i := 0; i < 10; i++ {
go func(j int) {
hello(j)
}(i)
}
time.Sleep(time.Second)
}
func HelloGoRoutine2() {
var wg sync.WaitGroup
wg.Add(10)
for i := 0; i < 10; i++ {
go func(j int) {
defer wg.Done()
hello(j)