获得徽章 0
赞了这篇沸点
抱最大希望,尽最大努力,做最坏打算,持最好心态,记住该记住的,忘记该忘记的,改变能改变的,接受成事实的,太阳总是新的,每天都是美好的日子。
17
40
### 1. 并发与并行
- 并发是指程序的结构,可以同时处理多个任务,但不一定是同时执行。Go利用goroutine实现并发,每个goroutine都是一个轻量级线程。
- 并行是指多个任务同时执行,利用多核处理器的能力实现真正的并行操作。
### 2. Goroutine
- Goroutine是Go语言中并发的基本单元,通过关键字`go`启动。
- Goroutine比传统线程更轻量级,可以在单个线程上运行成千上万个goroutine。
- 使用`go`关键字创建goroutine:`go functionName(args)`
### 3. Channel
- Channel是用来在goroutine之间传递数据的通信机制,避免竞态条件和共享内存问题。
- 通过`make`函数创建channel:`ch := make(chan Type)`
- 发送数据到channel:`ch <- data`
- 从channel接收数据:`data := <-ch`
### 4. Select语句
- `select`语句用于处理多个channel的并发操作,可以选择第一个准备就绪的channel进行通信。
- 避免使用`time.Sleep`来等待channel数据,而是使用`select`来监听channel的状态。
### 5. 互斥锁(Mutex)
- 互斥锁用于保护共享资源,确保在任意时刻只有一个goroutine可以访问。
- 使用`sync`包中的`Mutex`类型实现互斥锁。
### 6. WaitGroup
- `sync.WaitGroup`用于等待一组goroutine完成执行,防止主程序提前退出。
- 通过`Add`方法增加等待的goroutine数量,`Done`方法减少数量,`Wait`方法阻塞直到数量为零。
### 7. 原子操作
- Go语言提供了`sync/atomic`包来进行原子操作,用于在不使用锁的情况下操作共享资源。
### 8. 数据竞争检测
- Go工具链提供了`-race`标志用于检测并发程序中的数据竞争问题。
### 9. 并发安全性
- 设计并发程序时要考虑并发安全性,避免数据竞争和死锁问题。
- 使用通信来共享内存,而不是使用共享内存来通信。
。
- 并发是指程序的结构,可以同时处理多个任务,但不一定是同时执行。Go利用goroutine实现并发,每个goroutine都是一个轻量级线程。
- 并行是指多个任务同时执行,利用多核处理器的能力实现真正的并行操作。
### 2. Goroutine
- Goroutine是Go语言中并发的基本单元,通过关键字`go`启动。
- Goroutine比传统线程更轻量级,可以在单个线程上运行成千上万个goroutine。
- 使用`go`关键字创建goroutine:`go functionName(args)`
### 3. Channel
- Channel是用来在goroutine之间传递数据的通信机制,避免竞态条件和共享内存问题。
- 通过`make`函数创建channel:`ch := make(chan Type)`
- 发送数据到channel:`ch <- data`
- 从channel接收数据:`data := <-ch`
### 4. Select语句
- `select`语句用于处理多个channel的并发操作,可以选择第一个准备就绪的channel进行通信。
- 避免使用`time.Sleep`来等待channel数据,而是使用`select`来监听channel的状态。
### 5. 互斥锁(Mutex)
- 互斥锁用于保护共享资源,确保在任意时刻只有一个goroutine可以访问。
- 使用`sync`包中的`Mutex`类型实现互斥锁。
### 6. WaitGroup
- `sync.WaitGroup`用于等待一组goroutine完成执行,防止主程序提前退出。
- 通过`Add`方法增加等待的goroutine数量,`Done`方法减少数量,`Wait`方法阻塞直到数量为零。
### 7. 原子操作
- Go语言提供了`sync/atomic`包来进行原子操作,用于在不使用锁的情况下操作共享资源。
### 8. 数据竞争检测
- Go工具链提供了`-race`标志用于检测并发程序中的数据竞争问题。
### 9. 并发安全性
- 设计并发程序时要考虑并发安全性,避免数据竞争和死锁问题。
- 使用通信来共享内存,而不是使用共享内存来通信。
。
展开
评论
点赞
赞了这篇沸点
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)