并发
一、进程、线程、协程
进程是程序在操作系统的一次执行过程,系统进行资源分配和调度的单位。
线程是进程的执行整体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
同一个进程中的多个线程之间可以并发执行。
协程具有独立的栈空间,共享堆空间,调度由用户自己控制。一个线程上可以跑多个线程,协程是轻量级的线程。
协程本身没有增加线程的数量,是在线程上通过分时复用的方式运行多个协程,并且协程的切换在用户态完成。没有切换线程、阻塞线程时,从用户态到内核态的耗时。切换代价更小。
二、Goroutine
goroutine是一种非常轻量级的实现。由 Go 运行时(runtime)管理。Go 程序会智能地将 goroutine 中的任务合理地分配给每个 CPU。 使用go关键字就可以创建goroutine。将 go 声明放到一个需调用的函数之前,这样该函数执行时便会作为一个独立的并发线程,这种线程在Go语言中则被称为 goroutine。
goroutine在main()函数结束的时候会一同结束。