mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-11-13 17:36:12 +08:00
modified: eBook/14.4.md
This commit is contained in:
@@ -1,11 +1,7 @@
|
|||||||
# 14.4 使用 select 切换协程
|
# 14.4 使用 select 切换协程
|
||||||
|
|
||||||
从不不同的并发执行的协程中获取值可以通过关键字 `select` 来完成,它和 `switch` 控制语句非常相似(第 5.3 节)也被称作通信开关;它的行为像是“你准备好了吗”的轮询机制;`select` 监听进入通道的数据,也可以是用通道发送值的时候。
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
从不同的并发执行的协程中获取值可以通过关键字`select`来完成,它和`switch`控制语句非常相似(章节5.3)也被称作通信开关;它的行为像是“你准备好了吗”的轮询机制;`select`监听进入通道的数据,也可以是用通道发送值的时候。
|
从不同的并发执行的协程中获取值可以通过关键字`select`来完成,它和`switch`控制语句非常相似(章节5.3)也被称作通信开关;它的行为像是“你准备好了吗”的轮询机制;`select`监听进入通道的数据,也可以是用通道发送值的时候。
|
||||||
=======
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
```go
|
```go
|
||||||
select {
|
select {
|
||||||
case u:= <- ch1:
|
case u:= <- ch1:
|
||||||
@@ -18,20 +14,13 @@ default: // no value ready to be received
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
`select`做的就是:选择处理列出的多个通信情况中的一个。
|
|
||||||
* 如果都阻塞了,会等待直到其中一个可以处理
|
|
||||||
* 如果多个可以处理,随机选择一个
|
|
||||||
* 如果没有通道操作可以处理并且写了`default`语句,它就会执行:`default`永远是可运行的(这就是准备好了,可以执行)。
|
|
||||||
=======
|
|
||||||
`default` 语句是可选的;fallthrough 行为,和普通的 switch 相似,是不允许的。在任何一个 case 中执行 `break` 或者 `return`,select 就结束了。
|
`default` 语句是可选的;fallthrough 行为,和普通的 switch 相似,是不允许的。在任何一个 case 中执行 `break` 或者 `return`,select 就结束了。
|
||||||
|
|
||||||
`select` 做得就是:选择处理列出的多个通信情况中的一个。
|
`select` 做的就是:选择处理列出的多个通信情况中的一个。
|
||||||
|
|
||||||
- 如果都阻塞了,会等待直到其中一个可以处理
|
- 如果都阻塞了,会等待直到其中一个可以处理
|
||||||
- 如果多个可以处理,随机选择一个
|
- 如果多个可以处理,随机选择一个
|
||||||
- 如果没有通道操作可以处理并且写了 `default` 语句,它就会执行:`default` 永远是可运行的(这就是准备好了,可以执行)。
|
- 如果没有通道操作可以处理并且写了 `default` 语句,它就会执行:`default` 永远是可运行的(这就是准备好了,可以执行)。
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
在 `select` 中使用发送操作并且有 `default`可以确保发送不被阻塞!如果没有 case,select 就会一直阻塞。
|
在 `select` 中使用发送操作并且有 `default`可以确保发送不被阻塞!如果没有 case,select 就会一直阻塞。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user