Golang进阶(一) | 青训营笔记

82 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第7天

语言进阶

(1). 并发与并行

并发与并行的概念是什么,有什么区别呢?
并发是指一个处理器同时处理多个任务
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是指逻辑层面上的同时发生,而并行是在物理层面上的同时发生。
对于多线程的程序,多线程程序可以在多核系统上发挥出优势,在多核上可以实现真正的并行;而在单核CPU上运行时,只是表象上的“并行”即类似于并发。
image.png Golang的特性可以说它是为了并发而生的语言,Go语言的并发主要是通过Goroutine实现的,Goroutine类似于线程,属于用户态的线程,可以根据需要,创建成相当多数目的Goroutine从而进行并发工作。和线程的区别是,Goroutine是由Go语言的运行时调度完成,而线程是由操作系统调度完成。
Golang还提供Channel在多个Goroutine间进行通信。Goroutine和Channel这两种方式,体现了CSP并发模式,实现了其基础。

(2). Goroutine

先介绍一下进程和线程的关系。

  • 进程就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。
  • 线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位。
  • 一个进程可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行。
  • 一个程序至少有一个进程,一个进程至少有一个线程。

Golang有主线程/进程和协程的说法,其中协程可以在主线程上存在多个,是更轻量的线程。具有独立的栈空间、共享程序堆空间,其调度由用户控制,并且协程是轻量级的线程,这些是Goroutine的特点。