您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 2浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Go语言goroutine+channel+select简介

phymat.nico 发布时间:2018-01-20 01:01:40 ,浏览量:2

goroutine:

Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,这种用户态线程是跑在内核级线程之上的,goroutine在运行时的调度是由Go语言提供的调度器来进行的,创建一个goroutine使用关键字go,go创建的goroutine不会阻塞主线程:

go func_name()

Go程序中没有语言级的关键字让你去创建一个内核线程,你只能创建goroutine,内核线程只能由调度器根据实际情况去创建。

调度器原理参考链接:http://studygolang.com/articles/1855

 

channel:

Channel是Go中的一个核心类型,可以把它看成一个管道,通过它可以发送或者接收数据进行通讯(communication)。配合goroutine,就形成了一种既简单又强大的请求处理模型,即N个工作goroutine将处理的中间结果或者最终结果放入一个channel,另外有M个工作goroutine从这个channel拿数据,再进行进一步加工,通过组合这种过程,可以胜任各种复杂的业务模型。

channel的基本操作:

var c chan int   //声明一个int类型的channel,注意,该语句仅声明,不初始化channel

c := make(chan type_name)   //创建一个无缓冲的type_name型的channel,无缓冲的channel当放入1个元素后,后续的输入便会阻塞

c := make(chan type_name, 100)   //创建一个缓冲区大小为100的type_name型的channel

c

关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.1419s