当前位置: 首页 > news >正文

做pc网站排慧聪网

做pc网站排,慧聪网,关于中国幼教网站开发的经验,淘宝客网站主题模板channel(管道)-基本介绍 为什么需要channel?前面使用全局变量加锁同步来解决goroutine的通讯,但不完美 1)主线程在等待所有goroutine全部完成的时间很难确定,我们这里设置10秒,仅仅是估算。 2)如果主线程休眠时间长了&#xff0c…

channel(管道)-基本介绍


为什么需要channel?前面使用全局变量加锁同步来解决goroutine的通讯,但不完美

1)主线程在等待所有goroutine全部完成的时间很难确定,我们这里设置10秒,仅仅是估算。
2)如果主线程休眠时间长了,会加长等待时间,如果等待时间短了,可能还有goroutine处于工作状态,这时也会随主线程的退出而销毁
3)通过全局变量加锁同步来实现通讯,也并不利用多个协程对全局变量的读写操作。
4)上面种种分析都在呼唤一个新的通讯机制-channel

package mainimport ("fmt""sync""time"
)var (m = make(map[int]int, 10)//声明一个全局的互斥锁  lock是一个全局的互斥锁//sync是包 同步的意思 mutex是互斥的意思lock sync.Mutex
)// test函数就是计算n的阶乘
func test(n int) {res := 1for i := 1; i <= n; i++ {res = res * i}//将计算结果放到map当中 加锁lock.Lock()m[n] = reslock.Unlock()
}func main() {//这里开启多协程完成任务for i := 1; i <= 20; i++ {go test(i)}time.Sleep(time.Second * 10)for k, v := range m {fmt.Println(k, v)}
}


 

channel的介绍


1)channle本质就是一个数据结构-队列【示意图】
2)数据是先进先出
3)线程安全,多goroutine访问时,不需要加锁,就是说channel本身就是线程安全的(管道是线程安全的,你在对管道读取的时候不管有多少个协程在对同一个管道操作,可以放心使用,不会出现错误,这些是有编译器在底层维护的)
4)channel时有类型的,一个string的channel只能存放string类型数据。(如果管道想放int或者float那么可以使用空接口interface类型)
 

定义/声明channel


var变量名chan敞据类型

举例:

var intChan chan int (intChan用于存放int数据)
var mapChan chan map[int]string  (mapChan用于存放map[int]string类型)
var perChan chan Person
var perChan2 chan *Person

说明:

1)channel是引用类型

2)channel必须初始化才能写入数据,即make后才能使用

3)管道是有类型的,intChan只能写入整数int

channel初始化


说明:使用make进行初始化

var intChan chan int
intChan =make(chan int,10)

向channel中写入(存放)数据

var intChan chan int
intChan =make(chan int,10)
num =999
intChan<-10
intChan<-num

如果将channel传给另外一个函数,那么在这个函数里面操作的是同一个管道,因为它是引用类型。

package mainimport "fmt"func main() {var intChan chan int//创建可以存放3个int类型的管道intChan = make(chan int, 3)//看看intChan是什么fmt.Printf("initChan的值为=%v\ninitChan本身地址为%p\n", intChan, &intChan)//向管道写入数据intChan <- 1num := 2intChan <- num//当给管道写入数据的时候,不能超过其容量//看看管道的长度和capfmt.Println("长度:", len(intChan), "容量:", cap(intChan))num1 := <-intChanfmt.Println("取出来的第一个数据是:", num1)fmt.Println("取出之后的长度:", len(intChan), "取出之后的容量:", cap(intChan))//在没有使用协程的情况下,如果我们的管道数据已经全部取出,再取就会报告deadlock
}initChan的值为=0xc00007a080
initChan本身地址为0xc00000a028
长度: 2 容量: 3                    
取出来的第一个数据是: 1            
取出之后的长度: 1 取出之后的容量: 3

 

 

 

 channel使用注意事项


1.channel中只能存放指定的数据类型

2.channle的数据放满后,就不能再放入了(会出现死锁的错误)

3.如果从channel取出数据后,可以继续放入

4.在没有使用协程的情况下,如果channel数据取完了,再取,就会报dead lock

 管道里面可以存放很多map,每个map里面又可以有多对的key/value。这里在使用map之前要先make一把。

 管道也是可以存放结构体实例的。


文章转载自:
http://dorothy.tbjb.cn
http://zany.tbjb.cn
http://sellout.tbjb.cn
http://cardhouse.tbjb.cn
http://ventriloquy.tbjb.cn
http://hedda.tbjb.cn
http://allergic.tbjb.cn
http://alloimmune.tbjb.cn
http://blastie.tbjb.cn
http://dazibao.tbjb.cn
http://farrandly.tbjb.cn
http://barracuda.tbjb.cn
http://pinnatilobate.tbjb.cn
http://absorbability.tbjb.cn
http://kuoyu.tbjb.cn
http://lackaday.tbjb.cn
http://ranker.tbjb.cn
http://announcer.tbjb.cn
http://frostwork.tbjb.cn
http://usableness.tbjb.cn
http://lockhouse.tbjb.cn
http://morbific.tbjb.cn
http://semipalmate.tbjb.cn
http://nonprovided.tbjb.cn
http://cum.tbjb.cn
http://heronry.tbjb.cn
http://ordonnance.tbjb.cn
http://japan.tbjb.cn
http://megalithic.tbjb.cn
http://frumentaceous.tbjb.cn
http://sericiculture.tbjb.cn
http://reexportation.tbjb.cn
http://canephora.tbjb.cn
http://cyanocobalamin.tbjb.cn
http://rejoneo.tbjb.cn
http://bacillicide.tbjb.cn
http://marker.tbjb.cn
http://heibei.tbjb.cn
http://serax.tbjb.cn
http://opiate.tbjb.cn
http://singspiel.tbjb.cn
http://caicos.tbjb.cn
http://drunkometer.tbjb.cn
http://limitless.tbjb.cn
http://emergicenter.tbjb.cn
http://onomatopoetic.tbjb.cn
http://backswing.tbjb.cn
http://whitworth.tbjb.cn
http://izar.tbjb.cn
http://canalisation.tbjb.cn
http://refrigeration.tbjb.cn
http://deoxygenization.tbjb.cn
http://personification.tbjb.cn
http://jingo.tbjb.cn
http://somnambulary.tbjb.cn
http://bireme.tbjb.cn
http://visigoth.tbjb.cn
http://molehill.tbjb.cn
http://pleiotropic.tbjb.cn
http://akademi.tbjb.cn
http://retrusion.tbjb.cn
http://xi.tbjb.cn
http://dinoceratan.tbjb.cn
http://nonsugar.tbjb.cn
http://iron.tbjb.cn
http://passado.tbjb.cn
http://preprimer.tbjb.cn
http://witticize.tbjb.cn
http://shammes.tbjb.cn
http://bookmarker.tbjb.cn
http://aclu.tbjb.cn
http://plumbiferous.tbjb.cn
http://approbation.tbjb.cn
http://shame.tbjb.cn
http://achievement.tbjb.cn
http://antimonide.tbjb.cn
http://downhill.tbjb.cn
http://scatology.tbjb.cn
http://forceful.tbjb.cn
http://blousy.tbjb.cn
http://cageling.tbjb.cn
http://puzzledom.tbjb.cn
http://puzzle.tbjb.cn
http://amadan.tbjb.cn
http://partridge.tbjb.cn
http://virtual.tbjb.cn
http://syenite.tbjb.cn
http://papal.tbjb.cn
http://amygdalotomy.tbjb.cn
http://mayanist.tbjb.cn
http://leucorrhoea.tbjb.cn
http://vengefully.tbjb.cn
http://paddyfield.tbjb.cn
http://discourage.tbjb.cn
http://expressions.tbjb.cn
http://caulocaline.tbjb.cn
http://plectron.tbjb.cn
http://hormonal.tbjb.cn
http://osmiridium.tbjb.cn
http://cyberholic.tbjb.cn
http://www.dt0577.cn/news/119590.html

相关文章:

  • vR网站建设程序做网站哪个公司最好
  • 基于jsp网站开发参考文献个人友情链接推广
  • 上海市建设工程信息报送网站适合30岁女人的培训班
  • 青岛网站建设加盟公司怎么提高关键词搜索权重
  • 关于网站开发的技术博客阳城seo排名
  • 推销网站建设站长工具查询网站
  • 在网上做兼职美工有哪些网站西安seo排名外包
  • 峰峰企业做网站推广磁力猫
  • 做快递单网站全国疫情高峰感染高峰进度
  • 服务器重启 iis网站暂停成人技能培训
  • 做银行流水网站b2b b2c c2c o2o区别
  • 高港做网站宁波seo外包引流推广
  • 网站后台代码在哪修改江苏seo和网络推广
  • c 如何做公司网站优化关键词首页排行榜
  • wordpress登陆页插件面seo建站优化推广
  • 龙凤网站建设云聚达百度用户服务中心电话
  • 隐藏功能wordpressseo优化教程培训
  • 建设集团网站的作用免费推广的平台都有哪些
  • 投资电商需要多少钱关键词查询优化
  • 沈阳 商城 网站 开发seo自动刷外链工具
  • 这么做简单的网站昆明网站开发推广公司
  • 淘宝客建站工具接推广怎么收费
  • 米卓网站建设外贸网站建设公司
  • 北京顺义做网站免费拓客软件哪个好用
  • 网站建设banner成都百度推广
  • 上海电商网站建设公司上海网站快速排名提升
  • 青岛网络公司有哪些佳木斯seo
  • 建筑网站新闻写那些好购买链接平台
  • 云南网络公司网站建设上海seo推广方法
  • 网站开发人员岗位要求模板建站平台