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

专门做水果的网站陈木胜老婆吴君如

专门做水果的网站,陈木胜老婆吴君如,广州哪家做网站价格好,星辰wordpresschannel(管道)-基本介绍 为什么需要channel#xff1f;前面使用全局变量加锁同步来解决goroutine的通讯#xff0c;但不完美 1)主线程在等待所有goroutine全部完成的时间很难确定#xff0c;我们这里设置10秒#xff0c;仅仅是估算。 2)如果主线程休眠时间长了#xff0c…channel(管道)-基本介绍 为什么需要channel前面使用全局变量加锁同步来解决goroutine的通讯但不完美 1)主线程在等待所有goroutine全部完成的时间很难确定我们这里设置10秒仅仅是估算。 2)如果主线程休眠时间长了会加长等待时间如果等待时间短了可能还有goroutine处于工作状态这时也会随主线程的退出而销毁 3)通过全局变量加锁同步来实现通讯也并不利用多个协程对全局变量的读写操作。 4)上面种种分析都在呼唤一个新的通讯机制-channel package mainimport (fmtsynctime )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 fmtfunc 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://www.pierceye.com/news/763948/

相关文章:

  • 江苏建设管理信息网站自己可以做装修效果图的网站
  • html网站欣赏杭州战争网站建设
  • 乐清市做淘宝网站公司网站支付体现功能怎么做
  • 做网站公司促销海报本网站只做信息展示
  • 网站建设商城模板仿我喜欢网站源码免费
  • 工商服务网优化网站推广
  • 嘉兴网站系统总部做一个网站一般要多少钱
  • win10电脑做网站网站为什么有价值是
  • 凡科网站建设视频impreza 4 wordpress
  • 北京大兴地区网站建设国外网站设计欣赏分析
  • 如何在网站中加入百度地图广东深圳软件开发公司
  • 诸城网站建设报价兰州网站建设公司有哪些
  • 技术网站的费用怎么做会计分录潍坊模板开发建站
  • 男生女生在床上做的那个网站公众号推广一个6元
  • 湛江做网站设计公司北京婚恋网站哪家最好
  • 大型网站建设的难点是什么物联网技术
  • 怎么免费建个免费的站点写作网站5妙不写就删除
  • 深圳网站建设软件开发公司排名网站做301的坏处
  • ai网站制作的图片
  • 自己想开个网站怎么弄移动端网站设计欣赏
  • 国外网站建站上海品牌策划设计
  • 郑州网站制作选择乐云seo网站建设误区图
  • 湖南智能网站建设多少钱会声会影免费模板网站
  • 社区网站建设方案书建站之星官方网站
  • 过时的网站什么公司做企业网站
  • 最新企业网站搜索引擎优化是做什么
  • 提高网站公信力 单仁手机设计培训网站建设
  • asp.net网站管理系统域名注册报备
  • 买了个网站后怎么做如何提高 网站的点击量
  • 哪些行业网站推广做的多o2o商城源码