并发(一) | 青训营

64 阅读1分钟

并发

一、进程、线程、协程

进程是程序在操作系统的一次执行过程,系统进行资源分配和调度的单位。

线程是进程的执行整体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

同一个进程中的多个线程之间可以并发执行。

协程具有独立的栈空间,共享堆空间,调度由用户自己控制。一个线程上可以跑多个线程,协程是轻量级的线程。

image.png

协程本身没有增加线程的数量,是在线程上通过分时复用的方式运行多个协程,并且协程的切换在用户态完成。没有切换线程、阻塞线程时,从用户态到内核态的耗时。切换代价更小。

二、Goroutine

goroutine是一种非常轻量级的实现。由 Go 运行时(runtime)管理。Go 程序会智能地将 goroutine 中的任务合理地分配给每个 CPU。 使用go关键字就可以创建goroutine。将 go 声明放到一个需调用的函数之前,这样该函数执行时便会作为一个独立的并发线程,这种线程在Go语言中则被称为 goroutine。

image.png goroutine在main()函数结束的时候会一同结束。