在Golang中,主要有三种并发模型:基于共享内存的并发模型、基于消息传递的并发模型和基于协程的并发模型。
- 基于共享内存的并发模型
基于共享内存的并发模型是一种在多个线程之间共享数据的并发模型,通过共享内存来实现多个线程之间的通信和同步。在Golang中,可以通过使用sync包中的互斥锁和条件变量来实现基于共享内存的并发模型。
下面是一个基于共享内存的并发模型的例子,其中有两个goroutine分别用于打印数字和字母:
2. 基于消息传递的并发模型
基于消息传递的并发模型是一种在多个goroutine之间通过传递消息来实现通信和同步的并发模型。在Golang中,可以使用channel来实现基于消息传递的并发模型。
下面是一个基于消息传递的并发模型的例子,其中有两个goroutine分别用于打印数字和字母:
3. 基于协程的并发模型
基于协程的并发模型是一种通过创建轻量级的协程来实现并发的并发模型。在Golang中,可以通过使用goroutine来实现基于协程的并发模型。
下面是一个基于协程的并发模型的例子,其中有两个goroutine分别用于打印数字和字母:
sync.WaitGroupwgmainwg.Add(2)
printNumbersprintLettersgogo
printNumbersprintLettersdefer wg.Done()WaitGroupwg.Wait()
printNumbersprintLetters
这个示例程序展示了如何使用协程和 WaitGroup 来控制并发任务的执行,是一个比较简单的并发模型。在实际开发中,还有一些其他的并发模型,比如使用 channel、mutex 等,根据具体需求选择合适的并发模型。