学习笔记:go的高级设置(一)go语言进阶|青训营;

52 阅读2分钟

go语言的特性远远不止我们之前提到的那些,现在我们先从go语言的进阶开始讲起。

go语言进阶

并发与并行

并发:

操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行(选自百度百科)。

        go语言多线程程序在一个核的cpu上面运行,会如图所示:

a55ea75a49c4984a763f5a80d9fb0b27_u=79054939,3899732665&fm=253&fmt=auto&app=138&f=PNG_w=500&h=395.webp

并发安全

但是这样我们也不是高枕无忧,万一在时间上,并发的两端有所重叠,那会发生什么现象?其中一个程序会被顶掉。
此时,我们需要引入两个函数,此处问题较为复杂,按照简单方式理解的话,就是把每个程序上一把锁,这把锁锁住了整个进程,告诉其它并发的程序“本次并发程序未执行完毕”,只有没上锁的时候才可启动并发。

具体原理可点击此处

并行

在操作系统中是指,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

与并发的对比如图所示:

b29a4a6b3d9d2bf8648d26a36db02c2c_u=3083614139,2973779827&fm=253&fmt=auto&app=138&f=JPEG_w=864&h=442.webp

通信

我们提倡通过通信共享内存而不是通过共享内存实现通信。

这两者有什么区别呢?

通过通信共享内存,相当于A给B打电话,告诉B,把内存更改了;

由内存实现通信,相当于A和B访问同一个保险箱,A更改了其中的权限,那么B拿到的就是A更改过后的材料。

通道

  1. 有缓冲通道
  2. 无缓冲通道

正如字面意思,是否为通道增加缓冲,若是有缓冲,当从通道中取走一个数据时,才会让下一个进入,两者之间有时间差;无缓冲则相当于使用线进行连接,期间没有时间差。

5c16415d8c02039e8d2b4eeb1ba2266c_u=2723552022,1999907500&fm=253&fmt=auto&app=138&f=PNG_w=1060&h=420.webp