美文网首页
2019-05-20

2019-05-20

作者: 格子衫老王 | 来源:发表于2019-05-20 21:36 被阅读0次

 Go语言并发编程特性

程序猿,一个让人又爱又恨的职业~ 程序猿老王初来简书,就是想要跟大家分享一些干货~我们的文章会由浅入深,循序渐进,且篇幅适合大家碎片化时间阅读,大家闲暇时候不妨看一看,顺便提高自己的编程能力~ 每篇文章都会配一个详实的例子给大家参考哦!

Go语言最近大行其道,如果你有c的基础那么go语言学习过程会比较顺利,因为毕竟这门语言曾经是基于c的哦!今天老王给大家介绍go语言的几个特性:

go课程结构

先来看看什么是goroutine和channel  那协程又是什么东西,以及与线程的差异性??

Goroutine称之为go语言的协程,可以理解为是轻量级的线程,我们都知道线程是cpu最小调用单元,多进程配合多线程可以最大程度的开发计算机多核的优势,但是在以往c代码的书写过程中,多进程多线程可谓是繁琐异常,因为涉及到操作系统的很多方面,但是在go里面协程与线程不同的是,协程的切换则是由用户控制,我们可以理解为用户端线程

Go协程实现方法十分简单:

(如果有需要go的相关资源请私信老王同志we-chat 814489173)

go并行结果

这里面声明协程只需要声明一个go ,go的后面使我们方法循环打印,协程的代码段放在循环里面,循环十次,也就是说我们现在起了10个协程,加上主函数main一共是11个协程,判断并行与否是通过打印结果判断的,打印结果是乱序的索引那么就说明是并行,如果是12345.。。。那就是串行。这里面可以看到goroutine是并行的,gotoutine可以理解为是一种守护线程,当然这只是相似,机理方面可能会有所不同

有了并行的操作 就要考虑数据的同步了,c里面是通过共享内存加信号量的方式进行数据同步,一堆函数,用起来比较麻烦(当然熟悉了以后就知道原来也是套路)go就简单很多了,直接用channel实现协程间通信,channel可以理解为是生产者消费者模型

Go语言学习架构

下面是一个channel的例子:

channel

第一是定义一个管道pipe,大家应该知道,go是强类型语言,所以这里声明一个管道变量pipe,需要通过有三个参数,chan表示是管道,int表示管道类型,3表示管道能存储多少个int类型(类型由前面定义)

pipe <- 1 这种操作是往管道存入数据

通过len(pipe)可以查看管道的的长度

然后下面的写法

vart1 int

t1 = <- pipe

等价于

t1 :=<- pipe

我们来总结一下:如果想要给管道放入值:定义的管道pipe < - 要存入的内容如果想要从管道中获取值:变量名 =<- 定义的管道pipe

[if !supportLineBreakNewLine]

[endif]

大家可以在自己的ide里面跑一下上面的例子~感受一下!

这一次就给大家介绍到这里,下次将为大家介绍go的其他特性,比如包的概念以及多返回值等等,敬请期待哦!

相关文章

网友评论

      本文标题:2019-05-20

      本文链接:https://www.haomeiwen.com/subject/tsmlzqtx.html