文档章节

使用 select 切换协程

兔之
 兔之
发布于 2017/07/13 16:41
字数 214
阅读 10
收藏 0

从不同的并发执行的协程中获取值可以使用 select 关键字来完成,它监听进入通道的数据。类型于 linux Socket IO 复用。

package main

import (
"fmt"
"time"
)

func pump1(ch chan int) {
	for i := 0; ; i++ {
		ch <- i * 2
	}
}

func pump2(ch chan int) {
	for i :=0 ; ; i++ {
		ch <- i + 5
	}
}

func suck(ch1, ch2 chan int) {
	for {
		select {
		case v := <- ch1:
			fmt.Printf("Received on channel 1: %d\n", v)
		case v := <- ch2:
			fmt.Printf("Received on channel 2: %d\n", v)
		}
	}
}

func main() {
	ch1 := make(chan int)
	ch2 := make(chan int)

	go pump1(ch1)
	go pump2(ch2)
	go suck(ch1, ch2)

	time.Sleep(1e9)
}

输出

...
Received on channel 2: 45378
Received on channel 2: 45379
Received on channel 2: 45380
Received on channel 2: 45381
Received on channel 2: 45382
Received on channel 2: 45383
Received on channel 2: 45384
Received on channel 2: 45385
Received on channel 2: 45386
Received on channel 1: 87548
Received on channel 2: 45387
Received on channel 2: 45388
Received on channel 2: 45389
Received on channel 2: 45390
Received on channel 2: 45391
Received on channel 2: 45392

© 著作权归作者所有

兔之
粉丝 69
博文 250
码字总数 96477
作品 7
深圳
程序员
私信 提问
Nova 中的协程 -- context switch & monkey patch (三)

原图出处 Overview Context Switch 是另一个和并发相随的问题,和线程不同,协程的上下文切换完全由应用程序负责,操作系统并不感知。以 nova-api 为例,在操作系统看来,该进程只有一个线程...

koala bear
2014/09/29
0
0
Go语言中协程的概念和基本使用

Go协程(Goroutine)是与其他函数同时运行的函数。可以认为Go协程是轻量级的线程。与创建线程相比,创建Go协程的成本很小。因此在Go中同时运行上千个协程是很常见的。 1、 Go语言的并发性 Go...

Oo若离oO
2018/05/22
865
0
Python学习记录-协程、异步IO

Python学习记录-协程、异步IO [TOC] 1. 协程 线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。 协程存在的意义:对于多线程应用,CPU通过切片的方式来切换...

ygqygq2
2018/05/23
0
0
tbox协程使用之切换与等待

tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持。 目前提供下面一些功能特性: 这里主要讲讲,基础的...

ruki
2016/10/29
42
0
Python3基础之学习笔记(九)-线程-进程-协程

文章目录 1. 线程与进程 2. 协程 1. 线程与进程 进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 线程:是操作系统能够...

GoldenKitten
01/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:TCP/IP协议

一、介绍 TCP协议属于OSI七层模型中的传输层协议,提供处于网络连接中的两台计算机之间的数据 传输。   在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议...

浮躁的码农
28分钟前
3
0
一言不合就删库跑路?万名贡献者和阿里巴巴开源的二三事

9 月 27 日云栖大会,阿里巴巴宣布贾扬清担任开源技术委员会负责人。 有人问:开源是为了什么? 从个人视角看,可以证明自己的专业能力,获得行业认可; 从企业视角看,可以建立技术影响力,...

大涛学弟
39分钟前
4
0
JAVA编程注意事项(性能篇)

1. 尽量在合适的场合使用单例 使用单例可以缩短加载的时间,提高加载的效率,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生...

你好夜故事
40分钟前
5
0
List 前端 AngularJS JS 对IP排序

数据格式 $scope.dataList=[ {"ip":"192.168.10.10", "port":"8080",...}, { "ip":"192.168.10.12", "port":"8080",... } ,.....] 调用 $scope.ipSortForward($scope.dataList,"ip") 核心代码......

最菜最菜之小菜鸟
41分钟前
4
0
浅析Cassandra LeveledCompactionStrategy

前言 Cassandra是基于LSM架构的分布式数据库。LSM中有一个很重要的过程,就是压缩(Compaction)。默认的压缩策略是SizeTieredCompactionStrategy,今天主要说一下另一种压缩策略LeveledComp...

阿里云官方博客
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部