go 缓冲区循环 以及 select选择

简介: go 缓冲区循环 以及 select选择

只有当 chan 关闭的时候,for 循环才会结束

当使用 for range 循环缓冲区的时候, 当缓冲区中没有 数据时 也是不会结束的

chan开销很小,不需要像文件一样,经常关闭,只有不需要使用时才需要关闭

Select 使用

只有当 chan1 chan2 有被准备好的 通道才可以执行,否则的话就陷入阻塞

如果有多个channel 准备好了 ,那就随机选一个分支进行执行

for{
Select {
Case chan1 <-x:
- x,y=y,x+y
Case  <- chan2 :
- fmt.Println("quit")
- return
}
}


缓冲区过多时的等待方法

var  waitgroup sync.WaitGroup
For i :=0 ; i<10 ;i++{
waitgroup.add(1)
go func(){
- fmt.Println("hellow world")
-   waitgroup.Done()
}()
waitgroup.Wait()
}


通过select 来监听超时

func listen_time_out() {
    chan1 := make(chan int, 1)
    listen_time_out := make(chan bool)
    go func() {
        for {
            select {
            case v := <-chan1:
                println(v)
            case chan1 <- 2:
                // chan1 <- 2
            case <-time.After(5 * time.Second):
                listen_time_out <- true
                return
                // break
            }
        }
    }()
    <-listen_time_out
}
func main() {
    listen_time_out()
}

定时退出程序

    go func() {
        select {
        case <-time.After(3 * time.Second):
            listen_time_out <- true
            // os.Exit(0)
        }
    }()
<- listen_time_out




相关文章
|
供应链 Go
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
138 0
|
5月前
|
人工智能 监控 Kubernetes
Go语言在select语句中实现优先级
Go语言中的`select`语句用于监控多个Channel的发送或接收操作,选择就绪的分支执行。它支持多种使用场景,如空`select`永久阻塞、单`case`阻塞读写、多`case`随机选择、配合`default`实现非阻塞操作等。通过嵌套`select`还可实现执行优先级,适用于如Kubernetes中任务调度等实际场景。
|
程序员 Go
Golang深入浅出之-Select语句在Go并发编程中的应用
【4月更文挑战第23天】Go语言中的`select`语句是并发编程的关键,用于协调多个通道的读写。它会阻塞直到某个通道操作可行,执行对应的代码块。常见问题包括忘记初始化通道、死锁和忽视`default`分支。要解决这些问题,需确保通道初始化、避免死锁并添加`default`分支以处理无数据可用的情况。理解并妥善处理这些问题能帮助编写更高效、健壮的并发程序。结合使用`context.Context`和定时器等工具,可提升`select`的灵活性和可控性。
247 2
|
3月前
|
Go 开发者
Go语言实战案例:使用select监听多个channel
本文为《Go语言100个实战案例 · 网络与并发篇》第5篇,详解Go并发核心工具`select`的使用。通过实际案例讲解如何监听多个Channel、实现多任务处理、超时控制和非阻塞通信,帮助开发者掌握Go并发编程中的多路异步事件处理技巧。
|
5月前
|
Go
理解 Go 语言中的 select 用法
本文深入解析了Go语言中`select`的用法,它类似于`switch case`,但仅用于通道(channel)的操作。文章通过多个示例说明了`select`的基本用法、避免死锁的方法、随机性特点以及如何实现超时机制。同时总结了`select`与`switch`的区别:`select`专用于通道操作,case执行是随机的,需注意死锁问题,且不支持`fallthrough`和函数表达式。
224 1
理解 Go 语言中的 select 用法
|
5月前
|
监控 Go 开发者
深入解析 go 语言中的 select 语句
在 Go 语言中,`select` 是专为并发编程设计的控制结构,用于在多个 channel 操作间进行非阻塞选择。它类似于 `switch`,但所有 case 分支必须是 channel 的 I/O 操作。本文通过通俗易懂的语言和丰富代码示例,详细讲解 `select` 的各种用法,包括基本语法、空 `select`、多分支选择、`default` 分支、特点总结及最佳实践,适合初学者和有经验的开发者学习参考。掌握 `select`,能有效提升 Go 并发编程的灵活性与效率。
197 6
|
5月前
|
Go 调度 开发者
Go 并发编程基础:select 多路复用
Go 语言中的 `select` 是一种强大的并发控制结构,用于同时监听多个通道操作。它支持随机选择就绪的通道、阻塞等待以及通过 `default` 实现非阻塞通信。结合 `time.After()`,可轻松实现超时机制,适用于网络请求、任务调度等场景。本文详细介绍了 `select` 的基本用法、特性及实战技巧,如合并多通道输入、处理通道关闭等,帮助开发者高效管理协程与通道交互,避免常见陷阱。
|
12月前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
197 2
|
12月前
|
Go
go语言中控制循环
go语言中控制循环
131 14
|
12月前
|
Go 索引
go语音中range 循环
go语音中range 循环
171 12

热门文章

最新文章