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的其他特性,比如包的概念以及多返回值等等,敬请期待哦!
网友评论