并发概念
1、并发和并行
- 多线程程序在单核CPU上运行,就是并发
- 多线程程序在多核CPU上运行,就是并行
- 并发主要由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,Go可以设置使用核数,以发挥多核计算机的能力。
2、协程和进程
- 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的
- 线程:一个线程可以跑多个协程,协程是轻量级的线程
goroutine
goroutine只是由官方实现的超级“线程池”
每个实例4~5KB的栈内存占用和由于实现机制而大幅减少创建和销毁开销是Go高并发的根本原因
goroutine奉行通过通信来共享内存,而不是共享内存来通信