游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Go语言channel的阻塞问题

  Hello,大家好,又见面了!上一遍我们将channel相关基础以及使用场景。这一篇,还需要再次进阶理解channel阻塞问题。以下创建一个chan类型为int,cap为3。ch:make(chanstring,1)
  channel内部其实是一个环形buf数据结构,是一种滑动窗口机制,当make完后,就分配在Heap上。
  Channel是如何发送数据和接收数据,会有什么问题出现,面试也是常见。设G1为发送者:chhello
  上面,向chan发送一条hello数据:第一步:acquirelock第二步:enqueue(把hello拷贝buf数组里)第三步:releaselock
  如果G1发送数据超过指定cap时,会出现什么情况?
  看下面实例:ch:make(chanint,1)ch100ch200
  以上会出现什么,chan缓冲区允许大小为1,如果再往chan仍数据,满了就会被阻塞,那么是如何实现阻塞的呢?当chan满时,会进入gopark,此时G1进入一个waiting状态,然后会创建一个sudog对象,其实就sendq队列,把200放进去。等buf不满的时候,再唤醒放入buf里面。
  通过如下源码,你会更加清晰:typehchanstruct{省略部分代码recvqwaitqlistofrecvwaiterssendqwaitqlistofsendwaiters省略部分代码}typewaitqstruct{firstsudoglastsudog}typesudogstruct{ggnextsudogprevsudogelemunsafe。Pointerdataelement(maypointtostack)acquiretimeint64releasetimeint64ticketuint32isSelectboolsuccessboolparentsudogsemaRootbinarytreewaitlinksudogg。waitinglistorsemaRootwaittailsudogsemaRootchchanchannel}设G2为接收者:d:ch
  上面,从chan获取数据:第一步:也是先获取锁第二步:从buf数据里面拷贝,赋给d变量第三步:releaselock
  Go语言核心思想:Donotcommunicatebysharingmemory;instead,sharememorybycommunicating。你可以看看这本书名叫:EffectiveGo
  如果接收者,接收一个空对象,也会发生什么情况?
  代码示例:ch:make(chanint,1)t:ch
  也会报错如下:fatalerror:allgoroutinesareasleepdeadlock!
  上面,从chan取出数据,可是没有数据了。此时,它会把接收者G2阻塞掉,也是和G1发送者一样,也会执行gopark将状态改为waiting,不一样的点就是。
  正常情况下,接收者G2作为取出数据是去buf读取数据的,但现在,buf为空了,此时,接收者G2会将sudog导出来,因为现在G2已经被阻塞了嘛,会把G2给G,然后将t:ch中变量t是在栈上的地址,放进去elem,也就是说,只存它的地址指针在sudog里面。
  最后,ch200当G1往chan添加200这个数据,正常情况是将数据添加到buf里面,然后唤醒G2是吧,而现在是将G1的添加200数据直接干到刚才G2阻塞的t这里变量里面。
  你会认为,这样真的可以吗?想一想,G2本来就是已经阻塞了,然后我们直接这么干肯定没有什么毛病,而且效率提高了,不需要再次放入buf再取出,这个过程也是需要时间。不然,不得往chan添加数据需要加锁、拷贝、解锁一序列操作,那肯定就慢了,我想Go语言是为了高效及内存使用率的考虑这样设计的。(注意,一般都是在runtime里面完成,不然会出现象安全问题。)
  总结:
  chan类型的特点:chan如果为空,receiver接收数据的时候就会阻塞等待,直到chan被关闭或者有新的数据到来。有这种个机制,就可以实现waitnotify的设计模式。使用channel要思考的问题?如果N个发送者发送到chan及N个接收者,这样会频繁导致锁频繁争用;如果N个往chan发送,而buf很小,会导致Goroutine不断被gopark,然后runtime开销就大了;
  相关面试题:channel有缓冲区和无缓冲区别?channel线程安全吗?是否了解channel底层实现,比如channel底层数据结构?环形buf
  你的每次点赞收藏关注是我创作最大动力。加油,奋斗永远都在路上!

IEEE全票通过,首个隐私保护机器学习国际标准正式推行近日,IEEE标准委员会正式发布并推行了基于可信执行环境的隐私保护机器学习的国际标准(IEEEStd2830)。这也是国际上首个基于可信执行环境的隐私保护机器学习技术框架与要求……学习规划设计阶段的成本管理学习目录:一、如何认识规划设计二、如何理解规划设计阶段的成本管理三、目标成本是成本管理的前提四、项目设计过程是实现成本效益最大化的方法五、项目规划……我的母亲的阅读答案介绍阅读文章要有想法,和小编一起来看看我的母亲的阅读答案介绍的内容吧!阅读下面语段,完成第6题。当我在小学毕了业的时候,亲友一致的愿意我去学手艺,好帮助母亲。我晓得我应……过半的解释及造句过半拼音【注音】:guoban过半解释【意思】:超过总数的一半:数时间,任务。过半造句:1、再过半个小时蜂蜜就会凝结起来。2、现在,我们在过……八年级思想品德下教学反思思品反思随着物质生活水平的日益提高和对精神消费要求的提高,人们走进自然,回归自然,在游山玩水中享受大自然对人类的差异,对自然美的鉴赏水平千差万别。为了我们的明天和子孙后代……马斯克美国应取消所有形式政府补贴据报道,马斯克周一表示,美国国会不应批准拜登政府提出的增加电动汽车补贴的议案,称该议案将加剧美国的预算赤字。马斯克在接受采访时表示对联邦赤字感到担忧。他对共和党提出的一项提案提……华为5G再遭抵制,未来一片黑暗?任正非为何要发布只支持4G的制裁不断,华为5G再遭美国抵制,前景难道真的一片黑暗?手机在海外市场的份额不断下跌,华为的未来究竟会怎样发展?不少用户表示,华为新推出的P50价格有些过分,在自己大力宣传5G的……央视传来好消息,中国科技再次突破,华为小米荣登喜榜就在最近,中国科技频频上央视,我就看到华为、小米不止一次上过央视了,像华为的鸿蒙系统最近就多次登上央视。小米更是不得了,在今年登上央视的次数我都数不过来了,而在最近它又带……祖先的摇篮教学设计一、教学目标:(一)、知识与技能:1、学会本课的生字新词。培养学生联系上下文理解词语的能力。2、理解课文内容。3、继续培养学生正确、流利、有感情地朗读课……哪座房子最漂亮第一课时教案课时目标:1、认识12个生字,和认识四个新偏旁广,户,突宝盖,尸2、正确、流利地朗读课文3、理解课文内容,体会到改革开放以来,农村变化很大,农民盖了很多新房,……小学五年级数学平移与旋转教案一、教学目标:1、认知目标:结合学生的生活经验和实例,感知平移和旋转的现象,并会直观地区别这两种常见的现象。2、情感目标:平移和旋转给生活带来很多乐趣3、能力……小信箱教学反思学期初,我班创设了我夸孩子信箱。一方面是想以此来了解孩子在家的生活、行为习惯的闪光点;另一方面是想以此来增强孩子们的自信心,从而达到家园共育的目的。今天早晨,余致远兴高采……
对学生学习习惯反思有好些家长问过我:老师,你教的知识我们孩子听得懂,也会做,可为什么老是要出错呢?我也曾告诉某个家长:你们家小孩上课回答问题相当积极,思路也正确,但就是一动笔做题,就出错。我一直……冀教版英语五年级BeijingisGreat教学反思1、本节课总体来说我感觉还是达到教学目标的,基本满意。2、我觉得精彩的片段应是最后的延伸那个环节,学生在设置情境的情况下,自己有英语简介有关北京的语言,让我感到学生学习深……鸡妈妈的蛋宝宝优秀教案活动目标:喜欢参与集体活动,丰富幼儿的认知经验和发展幼儿的观察能力。活动准备:ji妈妈图片2幅;蛋宝宝若干;熟ji蛋1个,生ji蛋1个;幼儿人手一个马甲袋;箩筐2个。……区域发展阶段与人类活动导学设计通过实例,说明区域发展受资源、环境、产业结构、社会经济文化等要素的影响。sup2;通过实例分析,认识区域发展的自身规律,并能说出区域发展的各个阶段。sup2;通过对……四个有的造句天上的白云各种各样,有的像小老虎;有的像小白兔;有的像想狮子;有的像小猫,漂亮极了。下面小编为你整理了四个有的造句,希望能帮到你!1、深秋的黄昏,天上尽是火烧云。有的像狮……高二英语学期教学反思范文(一)思想方面:本人能积极参加政治学习,关心国家大事,拥护以xx同志为核心的党中央的正确领导,教育目的明确,态度端正,钻研业务,勤奋刻苦;关心学生,爱护学生,为人师表,有……自选商场的教案教材简析《自选商场》是人教版新教材第一册识字(二)的第2课。本课是看图回类识字课,内容包括三部分:第一部分是自选商场的插图,及图下的三组词语,通过图画帮助学生了解自……青虫之爱语文的阅读答案珍惜生命甘如轻生自杀,在生活中是极少的;不珍惜生命,却比比可见。著名科学家富兰克林说过:你热爱生命吗?那么别浪费时间,因为时间是组成生命的材料。有些人不能说他不热爱自己的……互联网的下半场规则由谁来定阅读理解及答案互联网的下半场规则由谁来定当前,整个网络空间的重心已经开始转移了,大的格局正在发生变化,从原来的以美国为中心,以发达国家为重点,逐渐转变为以发展中国家、以中国为中心的新阶……高中语文出师表教学反思本文可以说是初中阶段最难的一篇古文了,为了落实本文的教学重点和难点,解决学生畏惧学习古文的困难,设计了讲故事比赛,要求学生讲《三国演义》中的精彩故事,以此来激发他们学习热情。学……圆的认识说课稿人教版大家好!今天我说课的内容是《圆的认识》。下面我将从教材、学生、教法与学法、教学准备、教学程序、板书设计几个方面进行说课分析。一说教材1、教学内容及其所处的位置与作用……除数是整数的小数除法教学反思一、课前复习相关知识第一复习整数除法如:1155让学生在草稿上计算这道题,再让学生说一说计算方法,第二让学生说一说115的组成,从而通过复习整数除法的计算和小数的意义,有……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网