基础知识个人小记3 | 青训营

67 阅读1分钟

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关键字,表示开启一个goroutine,这里的hello函数就会在一个新的goroutine中执行,(i)是传递给hello函数的参数
		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关键字,表示开启一个goroutine,这里的hello函数就会在一个新的goroutine中执行,(i)是传递给hello函数的参数
		go func(j int) {
			defer wg.Done()
			hello(j)