总述
Go依靠独特的轻量级的协程 轻松创建上百万个任务不会导致系统的资源衰竭 (相比起来进程和线程最多也不会超过1w个)
接下来主要从这几个方面展开:
- 什么是并发编程
- Go如何实现并发
- 并发的原理
- 协程之间通信依靠的chanel
- 同步异步
- 数据安全
并发
看起来同时
并行
真正同时
注意:
- 并行一定是多核的
- 并行看上去很牛逼 但是因为其任务之间的通信成本很高 导致其效果不一定好
进程(process)
每一个独立进行的程序就是进程,是程序中的一次动态执行过程,可与理解为正在执行的程序,是系统资源调度和分配的基本单位,拥有独立的内存单元,需要经历从代码加载,执行,到最后执行完毕。多进程的系统可以同时运行多个程序,因为CPU有自己的分时机制,所以每个程序都可以获取到自己的时间片,但是进程之间的信息交互比较麻烦,另外进程的创建,撤销,切换的开销大。
线程(thread)
线程是一个基本的CPU单元,是CPU调度和分配的最小单位。同一个进程下的线程可以共享系统资源,线程之间的切换代价小于进程之间的切换
协程(goroutine)
是一种用户态的轻量级线程,协程的调度完全通过用户来控制,协程和子函数很类似,一个入口 一次返回 一旦退出 就是完成。
Goroutine
未完待续