美文网首页
go 详解信道/通道 channel

go 详解信道/通道 channel

作者: 不死鸟F21 | 来源:发表于2023-02-05 09:53 被阅读0次

1.信道,就是一个管道,连接多个goroutine程序 ,它是一种队列式的数据结构,遵循先入先出的规则。

package main

import (
    "fmt"
    "time"
)

func chaninit() {
    // 定义 信道实例 := make(chan 信道类型)
    ch := make(chan int, 10)

    // 信道的容量和长度
    fmt.Println(cap(ch))
    ch <- 12
    fmt.Println(len(ch))

}

func increment(ch chan bool, x *int) {
    ch <- true
    *x = *x + 1
    <-ch
}

func test_incr() {
    // 注意要设置容量为 1 的缓冲信道
    pipline := make(chan bool, 1)

    var x int
    for i := 0; i < 1000; i++ {
        go increment(pipline, &x)
    }

    // 确保所有的协程都已完成
    // 以后会介绍一种更合适的方法(Mutex),这里暂时使用sleep
    fmt.Println("x 的值:0000", x)
    time.Sleep(time.Second)
    fmt.Println("x 的值:", x)
}
func for_test() {
    pipeline := make(chan int)

    go func() {
        pipeline <- 100
    }()
    go func() {
        num := <-pipeline
        fmt.Println("receive", num)
    }()
}
func main() {

    test_incr()
    time.Sleep(10 * time.Second)
}


package main

import (
    "fmt"
    "sync"
)

func test001() {
    ch := make(chan bool)
    go func() {
        for i := 0; i < 5; i++ {
            fmt.Println(i)
        }
        ch <- true
    }()
    <-ch
}

func worker(x int, wg *sync.WaitGroup) {
    defer wg.Done()
    for i := 0; i < 500; i++ {
        fmt.Println(i)
    }
}

func test002() {
    var wg sync.WaitGroup
    wg.Add(2)
    go worker(1, &wg)
    go worker(2, &wg)
    wg.Wait()

}

func main() {
    test001()
    test002()
}


相关文章

  • 文章收藏

    channel Go Channel 详解

  • GO信道(channel)

    channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享...

  • 直连(P2P)原理

    信道 信道也称作通道(Channel)、频段,是以无线信号(电磁波)作为传输载体的数据信号传送通道。无线网络(路由...

  • 《Go语言四十二章经》第二十二章 通道(channel)

    《Go语言四十二章经》第二十二章 通道(channel) 作者:李骁 22.1 通道(channel) Go 奉行...

  • Go语言——channel详解

    Go语言——channel详解 channel和goroutine是go语言最具特色是结构,有必要仔细研究。 源码...

  • golang的goroutine和channel的简单理解

    golang的goroutine和channel的理解 Go语言的goroutines,信道和死锁 gorouti...

  • 22. 信道(channel)

    22. 信道(channel) 什么是信道? 信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到...

  • 手机开发实战10——GSM信道介绍2

    控制信道(Control Channel) 控制信道(CCH),也称信令信道(Signalling Channel...

  • GO Channel详解

    Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(c...

  • go channel详解

    协程,通道 我们在普通程序中要执行代码如下代码 错误使用协程 由于没有调度,主协程率先执行完毕,代码执行已经关闭,...

网友评论

      本文标题:go 详解信道/通道 channel

      本文链接:https://www.haomeiwen.com/subject/ouayhdtx.html