go语言基础之并发goroutinechan(代码片段)

haima haima     2023-04-26     446

关键词:

示例一:

package main

import (
    "fmt"
    "sync"
)
var wg sync.WaitGroup
func main() 
    wg.Add(2)
    go nobufChannel() //不带缓冲区的初始化
    go bufChannel()   //有缓冲区的通道
    wg.Wait()


//不带缓冲区的初始化
func nobufChannel() 
    defer wg.Done()
    channel1 := make(chan int)
    go func() 
        x := <-channel1
        fmt.Println("channel里取出的数字:", x)
        close(channel1)
    ()
    channel1 <- 10
    fmt.Println("10存入channel")



//有缓冲区的通道
func bufChannel() 
    defer wg.Done()
    channel2 := make(chan int, 1) //指定了只能放一个数
    channel2 <- 10
    fmt.Println("10 发送到通道用bufChannel")
    //channel2 <- 20 //todo 指定了只能放一个数,取出后,才能继续向通道里存入数据
    //fmt.Println("20 发送到通道用bufChannel")
    ch2 := <-channel2
    fmt.Println("取出bufChannel中的数据,", ch2)

示例二:

package main

import (
    "fmt"
    "sync"
)
var wg sync.WaitGroup
var once sync.Once
func main() 
    a := make(chan int, 100)
    b := make(chan int, 100)
    wg.Add(3)
    setValue(a)
    go getValue(a, b)
    go getValue(a, b)
    for ret :=range b
        fmt.Println(ret)
    
    wg.Wait()

func setValue(a chan int) 
    defer wg.Done()
    for i := 1; i <= 100; i++ 
        a <- i
    
    close(a)


func getValue(a, b chan int) 
    defer wg.Done()
    for 
        v,ok:= <-a
        if !ok 
            break
        
        b  <- v
    
    once.Do(func()close(b))

go语言基础之并发(代码片段)

并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。Go语言中的并发编程并发与并行并发:同一时间段内执行多个任务并行:同一时刻执行多个任务Go语言的并发通过goro... 查看详情

go语言基础之并发(代码片段)

Go语言中的并发编程——并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。并发与并行并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。并... 查看详情

go语言之并发(代码片段)

一:并发基础1并发和并行并发和并行是两个不同的概念:1并行意味着程序在任意时刻都是同时运行的:2并发意味着程序在单位时间内是同时运行的详解:  并行就是在任一粒度的时间内都具备同时执行的能力:最简单的并行... 查看详情

19.go语言基础之并发(代码片段)

1.1并发与并行并发:同一时间段执行多个任务(使用微信和多个朋友聊天)并行:同一时刻执行多个任务(windows中360在杀毒,同时你也在写代码)Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以... 查看详情

go语言学习之旅--并发编程

Go语言学习之旅--并发编程golang并发编程之协程golang并发编程之通道golang并发编程之WaitGroup实现同步golang并发编程之runtime包golang并发编程之Mutex互斥锁实现同步golang并发编程之channel的遍历golang并发编程之selectswitchgolang并发编程之T... 查看详情

go语言学习之旅--并发编程

Go语言学习之旅--并发编程golang并发编程之协程golang并发编程之通道golang并发编程之WaitGroup实现同步golang并发编程之runtime包golang并发编程之Mutex互斥锁实现同步golang并发编程之channel的遍历golang并发编程之selectswitchgolang并发编程之T... 查看详情

go基础之文件操作命令行参数序列化并发编程(代码片段)

Go基础(三)之文件操作、命令行参数、序列化、并发编程一、文件操作1.1打开和关闭文件1.2读取文件1.2.1按字节读取:file.Read()1.2.2bufio按行读取文件1.2.3ioutil读取整个文件1.3文件写入1.3.1Write和WriteString1.3.2bufio.NewWriter1... 查看详情

go语言之并发示例-pool

针对这个资源池管理的一步步都实现了,而且做了详细的讲解,下面就看下整个示例代码,方便理解。package commonimport (    "errors"    "io"    "sync"    "log")//一 查看详情

go_11:go语言基础之并发concurrency

并发Concurrency  很多人都是冲着Go大肆宣扬的高并发而忍不住跃跃欲试,但其实从源码的解析来看,goroutine只是由官方实现的超级“线程池”而已。不过话说回来,每个实例4~5KB的栈内存占用和由于实现机制而大幅减少的创建... 查看详情

go语言基础之并发concurrency

并发Concurrency  很多人都是冲着Go大肆宣扬的高并发而忍不住跃跃欲试,但其实从源码的解析来看,goroutine只是由官方实现的超级“线程池”而已。不过话说回来,每个实例4~5KB的栈内存占用和由于实现机制而大幅减少的创建... 查看详情

go语言学习之旅--并发编程

Go语言学习之旅--并发编程golang并发编程之协程golang并发编程之通道golang并发编程之WaitGroup实现同步golang并发编程之runtime包golang并发编程之Mutex互斥锁实现同步golang并发编程之channel的遍历golang并发编程之selectswitchgolang并发编程之T... 查看详情

go语言基础之并发和网络

1、goroutine在这章中将展示Go使用channel和goroutine开发并行程序的能力。goroutine是Go并发能力的核心要素。但是,goroutine到底是什么?叫做goroutine是因为已有的短语——线程、协程、进程等等——传递了不准确的含义。goroutine有简单... 查看详情

go语言之并发资源竞争

并发本身并不复杂,但是因为有了资源竞争的问题,就使得我们开发出好的并发程序变得复杂起来,因为会引起很多莫名其妙的问题。package mainimport (    "fmt"    "runtime"    "sync")... 查看详情

go基础之程序结构数据类型(代码片段)

...让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性ÿ... 查看详情

go基础之程序结构数据类型(代码片段)

...让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性ÿ... 查看详情

go语言自学系列|golang并发编程之channel的遍历(代码片段)

视频来源:B站《golang入门到项目实战[2021最新Go语言教程,没有废话,纯干货!持续更新中...]》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,请移步至知乎网站,谢谢支持!附上... 查看详情

go语言之并发示例-pool

这篇文章演示使用有缓冲的通道实现一个资源池,这个资源池可以管理在任意多个goroutine之间共享的资源,比如网络连接、数据库连接等,我们在数据库操作的时候,比较常见的就是数据连接池,也可以基于我们实现的资源池来... 查看详情

go语言之并发编程channel

单向channel:单向通道可分为发送通道和接收通道。但是无论哪一种单向通道,都不应该出现在变量的声明中,假如初始化了这样一个变量varuselessChanchan<-int=make(chan<-int,10)这样一个变量该如何使用呢,这样一个只进不出的通道... 查看详情