【channel】泄露 & 注意事项

  • 知识点:
    main主协程退出,其他协程全部退出
    过去我们实现多线程通信通常通过共享内存来实现, 并需要对这块内存区进行枷锁操作, golang中我们可以通过channel实现协程通信
    channel可以接受任何类型数据,并且类型安全
    select多路复用:golang中用select关键字来检索channel的IO事件,并支持多channel同时检索,实现多路复用。select只接受IO操作,不接受表达式。
    读写channel可以隐式转换只读只写,反之不可以。
    注意通道传递方式,引用类型。实验转换之后外部chan是否权限改变。
  • 注意事项:以下
/*
注意事项:
    chan,一定是一个协程写,一个协程读,若在一个协程里又写又读,肯定死锁!因为在一个指令发生之后,会停止并等待
    buffer chan 可以在一个协程里又写又读(有范围)
    不能使用    var ch chan int 的形式声明,因为 nil chan无法receive也无法send
    尽量不要在函数里面声明chan,其他goroutine不好接收。
    chan等待没有回复,发生在其他goroutine会阻塞,不影响主程序。发生在主程,deadlock!
    若为主程序设置开关,一定在其他goroutine不会被阻塞的地方写入。
*/
package main

import (
    . "fmt"
    "strconv"
    "time"
)

func main() {
    go produce(ch5)
    go consume(ch5)
    time.Sleep(1*time.Second)
    m2()


    <- sw   //主程序等待produce结束
}

//product
type product struct {
    name      string
    attribute string
}
var ch1 = make(chan int)
var ch2 = make(chan int)
//var ch3 = make(chan int)
var ch5 = make(chan product)
//var ch5 = make(chan product,9) //此处,若ch5为buffer chan,会有何不同
var sw = make(chan bool)

//关于权限,隐式转换,当外部读写chan作为实参传入m1后,ch权限为receive-only,不可send。
//但是等m1返回之后,外部chan依然是receive-send。转换时,权限只能往小,不能往大。
func produce(ch chan<- product){
    println("produce")

    for i := 0; i < 9; i++ {
        ch <- product{"小浣熊",strconv.Itoa(i)}
        println(i)
    }
    sw <- true // 阻塞作用


}

func consume(ch chan product) {
    Println("consume")
    for {
        Println(<-ch)
    }

}

//多路复用
func m2()  {
    select {
    case i := <-ch1:
        Println("ch1:",i)
    case i := <-ch2:
        Println("ch2:",i)
    default:
        Println("ch1 ch2 均无写入")
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷
    观镜人阅读 181评论 0 0
  • 云安全与传统安全技术的关系云计算安全模式的划分与传统安全模式大体类似由于虚拟化的引入,需要纳入虚拟化的安全防护措施...
    被子十三阅读 592评论 0 1
  • 我从远方来 带着希望编织的梦 用十七个岁月的轮回 铺陈我的未来 我喜欢静静地 静静地聆听 诗人的对白 用声音 描摹...
    灯火阑珊心里话阅读 200评论 0 2
  • 我们并不知道,夜晚的歌声。好像 是黏稠的蘑菇汁液。夏天。汗也是蘑菇的汁液 不管窒闷还是,大雨倾盆 总有躯体在倒下,...
    shuozai阅读 366评论 1 1
  • 三生石上有没有你的名字
    304fb49ab15d阅读 175评论 0 0