浅谈Go语言并发编程特性……

程序猿,一个让人又爱又恨的职业~

老王建公众号的初衷,是想要跟大家分享一些干货~ 这里的文章会由浅入深,循序渐进,且篇幅适合大家碎片化时间阅读,闲暇时候不妨看一看,顺便提高自己的编程能力也不错哦~ 每篇文章都会配一个详实的例子给大家参考!

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

什么是goroutine和channel?协程又是什么东西?与线程的差异性在于??

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

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

go并行结果

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

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

下面是一个channel的例子:

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

pipe

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

然后下面的写法

vart1 int

t1 =

等价于

t1 :=

我们来总结一下:如果想要给管道放入值:定义的管道pipe

[if !supportLineBreakNewLine]

[endif]

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

这一次就给大家介绍到这里,下次将为大家介绍go的其他特性……

比如包的概念以及多返回值等等,敬请期待哦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190520A0QZ4100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券