go语言的特性远远不止我们之前提到的那些,现在我们先从go语言的进阶开始讲起。
go语言进阶
并发与并行
并发:
在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行(选自百度百科)。
go语言多线程程序在一个核的cpu上面运行,会如图所示:
并发安全
但是这样我们也不是高枕无忧,万一在时间上,并发的两端有所重叠,那会发生什么现象?其中一个程序会被顶掉。
此时,我们需要引入两个函数,此处问题较为复杂,按照简单方式理解的话,就是把每个程序上一把锁,这把锁锁住了整个进程,告诉其它并发的程序“本次并发程序未执行完毕”,只有没上锁的时候才可启动并发。
具体原理可点击此处。
并行
在操作系统中是指,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。
与并发的对比如图所示:
通信
我们提倡通过通信共享内存而不是通过共享内存实现通信。
这两者有什么区别呢?
通过通信共享内存,相当于A给B打电话,告诉B,把内存更改了;由内存实现通信,相当于A和B访问同一个保险箱,A更改了其中的权限,那么B拿到的就是A更改过后的材料。
通道
- 有缓冲通道
- 无缓冲通道
正如字面意思,是否为通道增加缓冲,若是有缓冲,当从通道中取走一个数据时,才会让下一个进入,两者之间有时间差;无缓冲则相当于使用线进行连接,期间没有时间差。