GO语言基础语法(一) | 青训营笔记

87 阅读2分钟

Go 语言的并发(concurrency)与并行(parallelism)是两个重要的概念。

并发指的是能够让程序在多个独立的执行路径上执行,并在任意时刻执行多个任务的能力。Go 提供了 goroutine(协程)和 channel(管道)两种机制来实现并发。

协程是轻量级线程,由 Go 运行时(Go Runtime)管理。它可以在单个线程内同时运行多个协程,且切换协程的代价非常小,因此可以创建大量的协程。与线程不同的是,协程间的切换不需要操作系统的参与,而是由 Go 运行时自行完成。这种机制能够实现高效的并发处理,同时避免了线程切换的开销和资源浪费。

管道是协程间通信的主要方式,类似于 Unix 中的管道。它可以在协程间传递数据,实现了不同协程的数据传递和同步,从而更好地利用协程的并发性能。

并行指的是程序在多个物理处理器上同时执行多个任务的能力。Go 也提供了并行执行的功能,多个 goroutine 可以在多个 CPU 核心上同时执行。Go 1.5 版本之后,Go 标准库还提供了类似于 Java 中的 Callable 接口的并行执行机制,称为 Future/Channel 模式,它可以利用多核 CPU 在并行执行任务的同时获取任务的结果。

需要注意的是,并发和并行并不是相同的概念,它们分别描述了程序处理任务的方式(单线程和多线程)和任务运行所需的硬件资源(单核和多核)。虽然并发和并行概念上有着一定的区别,但在实际编程中,它们常常一起使用,来提高程序的性能和效率。