Go语言中文网 为您找到相关结果 2

[go语言]select多路选择的模拟实现

有时候有这样一种应用场景:需要等待多个事件到达,然后返回尽可能多的事件;如果没有事件到达就阻塞等待。例如服务器等待客户端建立连接,或者等待客户端数据等就有这种应用需求。 在go语言里,可以利用select原语和它的非阻塞(default)分支组合实现这个功能: // 从ch获取尽可能多的数据放到events里,并返回实际数量;如果没有数据就阻塞等待 func wait(ch chan int, events []int) int { count := 0 for count < len(events) { select { case x := <-ch: events[count] = x count++ default: if count > 0 { return count } even...阅读全文

博文 2014-10-30 18:07:21 stevewang

[Golang]Select多路选择的模拟实现

有时候有这样一种应用场景:需要等待多个事件到达,然后返回尽可能多的事件;如果没有事件到达就阻塞等待。例如服务器等待客户端建立连接,或者等待客户端数据等就有这种应用需求。 在go语言里,可以利用select原语和它的非阻塞(default)分支组合实现这个功能: // 从ch获取尽可能多的数据放到events里,并返回实际数量;如果没有数据就阻塞等待 func wait(ch chan int, events []int) int { count := 0 for count < len(events) { select { case x := <-ch: events[count] = x count++ default: if count > 0 { return count } even...阅读全文

博文 2015-06-18 17:05:38 abv123456789